Shop OBEX P1 Docs P2 Docs Learn Events
Propeller OS, FemtoBasic, and SD Cards — Parallax Forums

Propeller OS, FemtoBasic, and SD Cards

Mike GreenMike Green Posts: 23,101
edited 2007-01-18 19:40 in Propeller 1
This is a "current working copy" of the Propeller OS that has experimental support for SD cards using Rokicki's SPIN driver. There's also an experimental version of FemtoBasic with OS and SD card support for saving programs to EEPROM pages or SD files. To use these properly requires a Hydra with an SD card connected to an expansion card: DO-exp0, Clk-exp1, DI-exp2, CS-exp3. You can also use this with a Demo Board with extra EEPROM connected to pins 4/5 or 6/7 (SCL/SDA) and the SD card connected: DO-pin0, Clk-pin1, DI-pin2, CS-pin3. It should work with the pending Protoboard with the keyboard and VGA adapters wired the same as the Demo Board since that already has an extra 32K of EEPROM. Note that you can't use the VGA version with the Hydra since the expansion bus uses the VGA signal lines.

As usual with the OS, you load the proper binary version of FemtoBasic into the boot EEPROM, then load the proper binary version of the OS into RAM. Once it's running, you do a "copy boot femtobasic" to copy the boot EEPROM with FemtoBasic into some other EEPROM area, then go back and reload the OS, this time into the boot EEPROM. You can copy EEPROM files to SD cards using a "test save <EEPROM file> <SD card file>" command. You can load them back into EEPROM using a "test load <SD card file> <EEPROM file>" command. A "test list" command will list the files in the root directory of the SD card. A "test delete <SD card file>" command will delete the specified file.

With FemtoBasic, the convention is that SD card file names are enclosed in double quotes while EEPROM files are not. To save a program to EEPROM file foobah, use 'save foobah'. To save the program to an SD card, use 'save "foobah"'. The same with loading a program. The "files" command lists both the EEPROM files and the SD card files. For now, "files" will complain if there's no SD card. Similarly, use 'delete foobah' to delete the EEPROM file and 'delete "foobah"' to delete the SD card file.

As in a previous posting, you can read and write data from/to an SD card file. Note that you can only read comma delimited numeric expressions from a file, but you can write anything that you can produce with a PRINT statement (using a WRITE statement for the file).

I expect that these will be buggy. I've done simple testing on a Hydra with a TV display and a Demo Board with both a TV and VGA display (with extra EEPROM attached to pins 6/7). The SD card I/O is slow and that will eventually be fixed. This is intended as a demonstration of what can be done with essentially a Protoboard with the accessory parts along with an SD card with some pullup resistors.

Comments

  • KlossKloss Posts: 43
    edited 2007-01-17 11:15
    Mike,

    why do you use extra pins for the second EEPROM?
    I2C EEPROM can have different addresses, selectable
    by the address pins A0-A2. So you can place the second
    EEPROM in parallel to the first one, and just connect A0 to
    VDD instead of VSS.
    You'll have to change your routines to the new address, but
    this should be easy.

    cu
    Karl
  • Mike GreenMike Green Posts: 23,101
    edited 2007-01-17 15:17
    Kloss,
    You're basically correct, but, on the Demo Board (which I'm using), there's not a good way to get physical access to the I2C pins for the boot EEPROM. You'd have to solder very fine wires to the SMD processor or EEPROM pins or perhaps piggyback another EEPROM on top of the first one. I may try that some day, but it's really fine work and I'm not up for it yet. The OS will automatically recognize additional EEPROM attached to pins 28/29 as it's written and works fine with the additional EEPROM on the Hydra. There's a command in the OS ("probe <pin>") to look on a specific pair of pins for more EEPROM and it remembers what it found (at least until something is downloaded to the boot EEPROM and that table is erased). If you have some other kind of Propeller board where pins 28/29 are accessible, the OS and FemtoBasic will work just fine without any changes if you add more EEPROM as you suggest.
    Mike
  • KlossKloss Posts: 43
    edited 2007-01-18 08:37
    Nice!
    Did you think about serial flash for program storage?
    They are much faster because of the fast SPI interface, so
    running code directly from external memory (with caching
    in RAM) might be possible.

    cu
    Karl
  • GavinGavin Posts: 134
    edited 2007-01-18 11:23
    Mike,

    The new eval board has double the EEPROM, so I am hanging out waiting for them to use as CNC controllers[noparse]:)[/noparse]
    Would have been nice if there was access to P27, P28 for I2C expansion.

    Going to need a text editor for G-code editing on the prop, hint, hint.

    Gavin

    ·
  • Mike GreenMike Green Posts: 23,101
    edited 2007-01-18 14:18
    Karl,
    I thought about using some of the nice serial flash memories, like the 16M devices from Atmel. I didn't put in support for several reasons:
    1) I would need yet another unique file system to organize it. That's a lot of work and code
    2) I wanted something on removable media that could be used to transfer files to and from a PC (a standard file system)
    3) Removable media also means an open ended storage system. You can always buy another card and store the full one
    4) Current removable media are huge. 2GB SD cards are now cheap and widely available

    Gavin,
    The new Proto-board does have access to all pins including 28/29 so you can add more EEPROM to the boot EEPROM buss.
  • KlossKloss Posts: 43
    edited 2007-01-18 15:12
    Mike,
    I thought about using fixed slots of 32k for program storage, instead of using a file system.
    A 32Mbit serial flash ( AT45DB321D) would give you 132 slots for complete programs or
    modules, without wasting memory for a file system.
    Perhaps the first slot should contain an index with filenames.
    But you're right, it's not portable.

    Post Edited (Kloss) : 1/18/2007 3:17:12 PM GMT
  • Mike GreenMike Green Posts: 23,101
    edited 2007-01-18 15:19
    The OS already uses fixed 32K slots. Once you get much more than 16 slots, management becomes more difficult on a little screen (TV) without a hierarchy (like subdirectories). I also thought about the issue of backup. It would all have to be done serially or with some kind of removable storage. At that point, you might as well use the removable storage as the primary mass storage.
  • rokickirokicki Posts: 1,000
    edited 2007-01-18 17:29
    If the EEPROMs support 512-byte blocks, you could use the existing FAT16 code if you wanted for the EEPROMs.
    Of course, I don't think there is wear leveling on the EEPROMs. Do any of the EEPROM solutions support 512-byte
    blocks, or are they all oriented around larger pages?
  • Mike GreenMike Green Posts: 23,101
    edited 2007-01-18 18:33
    rokicki,
    I don't think there's any wear leveling on the serial flash memories. The large memories (16MB) use a "funny" block size that's a bit bigger than 512 bytes (528?). Maybe the extra bytes are intended for wear leveling bookkeeping, but the device doesn't do the work for you.
    Mike
  • Paul BakerPaul Baker Posts: 6,351
    edited 2007-01-18 19:40
    528 sounds like a HD sector size where a few extra bytes are provided for enumeration, CRC etc.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Paul Baker
    Propeller Applications Engineer

    Parallax, Inc.
Sign In or Register to comment.