# # # # ## # # # #
#### # ## ## ## ## ## ## ## ## ##### ###
##### ## ## ## ## ## # ####
_ _ ( ) ( ) | | | | | | | | | (_) | (_____)
## ## ##### ## ## ## ## ## ##
IMPORTANT: enter the case-INsensitive alphabetic (no numbers) code AND WRITE SOME SHORT summary of changes (below) if you are saving changes. (not required for previewing changes). Wiki-spamming is not tolerated, will be removed, so it does NOT even show up in history. Spammers go away now. Visit Preferences to set your user name Summary of change: '''This page is for developers about logging to MMC''' '''it takes complex and CPU-eating software to talk the native MMC protocol''' (bidirectional data line, CRC ...). * However '''most MMC cards support the SPI protocol''' (possibly all, according to [http://www.freelabs.com/~whitis/sd_card/ this useful page] ) * SD is not simpler than MMC, but all SD cards support SPI! Since we also use SPI for the knock-chip and MCP3208, it was an excellent choice to provide HW support SPI-based MMC on GenBoard/VerThree. ---- '''Old thoughts:''' For onboard logging (GenBoard/VerThree) we considered the SPI atmel flashes that appear MMC SPI-mode compatible: * [ http://www.atmel.com/dyn/products/product_card.asp?family_id=616&family_name=DataFlash%AE&part_id=2471 At45DB161B 16Mbit] * [http://www.atmel.com/dyn/products/product_card.asp?family_id=616&family_name=DataFlash%AE&part_id=2472 At45DB321B 32Mbit] * [http://www.atmel.com/dyn/products/product_card.asp?family_id=616&family_name=DataFlash%AE&part_id=2473 At45DB642 is dual interface, big] * [http://www.atmel.com/dyn/products/product_card.asp?part_id=2474 At45DB1282 is 128Mb version of the above.] * [http://www.atmel.com/dyn/resources/prod_documents/doc1456.pdf related AVR appnote for dataflash usage] Real MMC is basically the same electrical interface and protocol, but more available and can be removed if a socket is used. ---- '''Links''' Working system with MMC and ATmega161: * http://www.myplace.nu/mp3/ under ''hardware'' - ''yampp-7'' * http://butterflymp3.sourceforge.net/sw.html AVR plays MP3 from FAT16 stored on MMC ** everything we need for logging to MMC. look at sources/fat...c and mmc...c ** minor cosmetics needed to use non-busy (but interrupt based) reading of SPI data '''Flashfile C library for MMC/SD FAT'''http://www.avrfreaks.net/index.php?module=FreaksTools&func=viewItem&item_type=tool&item_id=516 '''Procyon AVRlib with MMC, FAT, IP, graphic lcd support and lots more''' http://hubbard.engr.scu.edu/embedded/avr/avrlib/ Basic tech info about hw & sw interface system * http://www.squirrelpf.com/msavr/files/MMCTech.pdf * http://www.squirrelpf.com/msavr/files/images.zip Hitachi 16MB MMC-!DataSheet as Sample * http://www.squirrelpf.com/msavr/files/Hitachi16.pdf * [http://www.dragonsgate.net/pipermail/icc-avr/2003-December/002816.html SPI codee] * [http://www.vems.hu/files/mmc/mmcsys-version_3-1.pdf Detailed MMC spec: 130 pages] * [http://www.squirrelpf.com/msavr/files/MMC-System-Summary-v3.31.pdf apparently a summary of the above: 38 pages] '''libraries:''' * http://www.squirrelpf.com/msavr/files/mmc_eagle_lib_20040112.zip * http://www.squirrelpf.com/msavr/files/MMCSocket20040111.zip * http://www.squirrelpf.com/msavr/files/mmpack.zip '''Tech sheets''' * http://www.conwin.com.tw/multi.htm * http://homepage.ntlworld.com/seanellis/mmcserial.htm * http://www.singatron.com/MCC.asp ---- '''MMC and SD sources''' Can someone check these Toshiba SD flash and comment on them? The question is if we can talk to it via SPI. * SD-M3203B3 * SD-M6404B3 (1.5 *price of SD-M3203B3) We would host in WebShop if suitable. Other type is OK, but we want to make sure to be fully compatible with our firmware and HW. That aside, they are drivable through SPI (sure?) Official doco appears to need licensed, but there's some limited info here - http://www.sandisk.com/oem/sd.asp ---- '''MMC sockets''' also digikey has some sockets from HRC hr845ct-nd $3.80 hr846ct-nd $3.80 Note that the '''MMC and SD have 7 pins with standard 2.54mm centerline so any card-edge connector should work'''. Your old 286 ISA motherboard comes to mind with a hammer in the background :-) ---- '''Steps to make it work in SPI mode''' * from Linux, dd some known data (preferrably huge unzipped textfile, like the bible) on an MMC / SD card * starting from an old floppy cable, solder wires to the card * check some alien sourcecode that uses SPI * check our SPI code for knock and MCP3208 * make a comm mode, that '''relays all data''' received via serial to the card (via SPI) ** and transmits all data received from the card (via SPI) through serial * start to experiment on PC, easy, since everything can be printed and examined * drive to SPI mode: CMD0 is 0x40 0x00 0x00 0x00 0x00 0x95 (last byte is CRC, constant in this case) ** note that CS is activated in any case, by the relay. Maybe CS must be activated after the first (0x40) byte transmitted, but before the last byte - not sure about this * turn off CRC (CMD59 IIRC?) * try to read a block from a certain address ** take note of the address and verify if the right part of the bible is printed * try to write block (and read back) '''AVR side''' * repeat stuff that already works on PC ** initialization ** block read ** block write * make a counter to know which byte is next ** the same bytes can be sent, as to MegaTune (49..51 bytes) ** note that start a new SendRTvar() sequence at the end of each block: 5 sequence fits, and a few bytes left for custom marker. The marker can be used by the user to mark runs. Eg. with a simply command like mkk53 he sets the marker to 0x53, so he'll know it means Friday eve testrun (when examining the log). * save the counter to EEPROM, so we know where to continue ** alternatively make a binary search (after boot) to find first blank (all-FF?) block to write to * command to erase blocks ** and set pointer to continue writing there '''PC app''' * to read from AVR * and save data to csv file * there are many apps for LogAnalysis, not part of this subproject. '''Future options''' * separate area for special data (config, tables ? not really needed in AVR since EEPROM is huge. Maybe needed in ARM though) ---- '''See also''' * GenBoard/LoggerIntegration Optional: Add document to category: Wiki formatting: * is Bullet list ** Bullet list subentry ... '''Bold''', ---- is horizontal ruler, <code> preformatted text... </code> See wiki editing HELP for tables and other formatting tips and tricks.