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(;;) { }
}