Compact Flash +AVR

May 22, 2006 7 Replies

hej czy ktos z Was bawil sie w podlaczanei CF do AVR? dla uproszczenia sobie robotki powielilem rozwiazanie z Yampp7 CF pracuje w IO mode, jedyna zmiana to uzycie ATMEGA128 zamaist ATMEGA161. przekompilowalem bibliteki w asm na atmega128 (chociaz nie powinno byc roznicy) soft z Yamp'a uproscilem ,wywalajac wszystko nie zwiazane z karta, kompiluje sie bez bledow, zachowalem oryginalny makefile, dodajac do neigo tylko obsluge AVRDUDE karta przechodzi inicjalizacje, funkcja CARD_Read(0) zwraca 0, jednakze bufor jest zapelniany wartosciami 0x8F. zwarc w ukladzie nie ma, na wszystkich sygnalach cos sie dzieje (oprocz -CE1) Nie mam czasu ani ochoty wnikac dokladnie w specyfikacje CF potrzebuje na szybko skopiowac pliczek 128MB z karty CF do pamieci SDRAM, w ten sposob tworzac zrodlo danych do testowania mojego algorytmu w FPGA. Prostsze to niz za kazdym razem slac ten pliczek przez UART do ukladu:-) do tego ustrojstwo ma byc przenosne.. Mam nadzieje ze ktos przerabial ten problem i mi pomoze. Pozdr Greg


oto listing



void main(void) { MCUCR = 0xC0; // enable external SRAM 1 waitstate XMCRA = 0; XMCRB = 0; USART1_Init( 12 ); SectorBuffer = (u08 *) card_sbuf; // 512 bytes



ATA_SetDrive(0); _delay_ms(10); // Init and wait for CARD ready WriteBYTE(ATA_SectorCount, SLEEP_TIME); // CF standby time * 5 milisecond (0=disable) WriteBYTE(ATAPI_Cmd, 0xE3); // set CF standby timer and execute IDLE ATA_WaitBusy();



// Boot Sector struct YADL_ROOT_SECTOR *pRoot; // Boot Sector struct pRoot = (YADL_ROOT_SECTOR *) SectorBuffer; // Allocate room from the temp buffer



while (CARD_Read(0)) // read root sector CARD_SW_Reset2();



u08 temp,data; u16 index;



for(index =0; index <512; index++) { //data =pRoot->buffer_ata[index]; data =card_sbuf[index]; temp = (data >>4) & 0x0f; if (temp > 9 ) temp += 0x7; USART1_Transmit(0x30+temp); temp = data & 0x0f; if (temp > 9 ) temp += 0x7; USART1_Transmit(0x30+temp); USART1_Transmit(' '); }



for(;;) { }


}

nie wiem jak szybko chcesz to kopiować ale lepsza jest pamięć SD/MMC, mniej nóżek, tańsze gniazdko, widziałem w necie gotowe funkcje do FATu , np. tu:

formatting link

wypadaloby szybko przeladowac te setki MB mam na PCB zarowno gniazdo pod CF, jak i pod MMC, ma mtez bbiliteki pod MMC. Jednakze nie mam pod reka zadnej karty MMC, znajomi maja glowie SD lub CF. MMC traktuje raczej jako ostateczna allternatywe.

Greg(G.Kasprowicz) napisał(a):

A czy SD nie jest wymienialne z MMC? Tj., MMC stanowi podzbiór SD, AFAIK.

SD po spi gada tak samo jak MMC. Różnice pojawiają się dopiero w tym drugim trybie, gdzie jest używane więcej nóg. U mnie SD działa na bez problemu na bibliotece z yammpa (z jedną małą poprawką, bo w orginale jest miejsce, gdzie program może się zapętlić na amen).

pozdrawiam

majek

Wlasnie doczytalem.. a u mnie jakies czary.. gadam do SD po winamp'owemu a na MISO cisza, na MOSI, SCK, CS idzie transmisja chyba bede musial jednak wgryzc sie w specyfikacje moze problem w tym ze oryginalnie byly te funkcje napisane na M162 a nie M128? porownalem datasheety, ale porty, SPI i xram sa akurat takie same w ty mtrybie pracy, dla pewnosci przekompilowalem biblioteki w ASM tak czy inaczej musze miec CF, bo zalezy mi na predkosci.

okazuje sie ze jest :) tylko cos nei za abrdzo da sie w gniazdo od MMC wepchnac..chyba ze z uzyciem sily..

sam sobie odpowiem, moze komus sie przyda odpalilem zarowno CF jak i MMC

okazalo sie ze w zrodlach ASM ata.h byl zle zdefiniowany adres rejestru #define ATAPI_RepData , powinno byc 0x18, bylo 0x10 po zmianie i przekompilowaniu bibliotek ASM uklad ruszyl. w przypadku kart MMC, po wlozeniu SD w gniazdo MMC nie dziala ona w trybie kompatybilnosci (pomijajac fakt ze ciezko wchodzi), widac potrzebne jest zlacze SD/MMC ktore widac zwiera jakis pin - nie wnikalem. po wlozeniu MMC ruszylo od razu. Pzodrawiam Greg

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required