LexRoss 0 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба Пишет (или читает?) со смещением адреса -1. Не понимаю почему. Значение 0xAA, записанное по адресу 0x02 читается по адресу 0x01. Чтение 0 страницы во 2 буфер: void AT45_Mem_to_Buf2(void) // считать страницу из памяти во 2 буфер { volatile int n; unsigned char MEM_status; SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) ); *pSPI_TDBR = 0x55; Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); //The SPI will be turned off SPI_OFF(); //Pause before continuing for(n=0; n<DELAY; n++) { asm("nop;"); } do { MEM_status = AT45_Status(); // ожидание готовности памяти } while (!(MEM_status & 0x80)); } Запись во 2 буфер по адресу 0x02 значения 0xAA void AT45_Buf2_Write(void) // модификация 2 буфера { volatile int n; //turns on the SPI in single write mode SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) ); *pSPI_TDBR = 0x87; // buf 2 Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x02; // adr Wait_For_SPIF(); *pSPI_TDBR = 0xAA; // data Wait_For_SPIF(); //The SPI will be turned off SPI_OFF(); //Pause before continuing for(n=0; n<DELAY; n++) { asm("nop;"); } } Запись 2 буфера в память void AT45_Buf2_to_Mem(void) // запись 2 буфера в память { volatile int n; unsigned char MEM_status; //turns on the SPI in single write mode SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) ); *pSPI_TDBR = 0x86; // buf 2 Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); //The SPI will be turned off SPI_OFF(); //Pause before continuing for(n=0; n<DELAY; n++) { asm("nop;"); } do { MEM_status = AT45_Status(); // ожидание готовности памяти } while (!(MEM_status & 0x80)); } Чтение 0 страницы через 1 буфер void AT45_Mem_to_Buf1(void) // считать страницу из памяти в 1 буфер { volatile int n; unsigned char MEM_status; SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) ); *pSPI_TDBR = 0x53; // buf 1 Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); //The SPI will be turned off SPI_OFF(); //Pause before continuing for(n=0; n<DELAY; n++) { asm("nop;"); } do { MEM_status = AT45_Status(); // ожидание готовности памяти } while (!(MEM_status & 0x80)); } Чтение из 1 буфера по адресу 0x01 unsigned char AT45_Buf1_Read(void) // чтение из 1 буфера { volatile int n; unsigned char spi_dat; unsigned long ulDummyRead, ulDummyWrite=0; unsigned char MEM_status; SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) ); *pSPI_TDBR = 0xD1; // buf 1 Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x00; Wait_For_SPIF(); *pSPI_TDBR = 0x01; // adr Wait_For_SPIF(); *pSPI_TDBR = 0x00; // 1 Dummy Byte Wait_For_SPIF(); ulDummyRead = *pSPI_RDBR; Wait_For_SPIF(); *pSPI_TDBR = ulDummyWrite; Wait_For_SPIF(); spi_dat = *pSPI_RDBR; //The SPI will be turned off SPI_OFF(); //Pause before continuing for(n=0; n<DELAY; n++) { asm("nop;"); } do { MEM_status = AT45_Status(); // ожидание готовности памяти } while (!(MEM_status & 0x80)); return spi_dat; } PS Если есть у кого драйвер для загрузки программы в эту флеш или примеры работы с ней, скиньте на 0x05собакаmail.ru Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба А зачем такая экзотика с частичными адресами? Почему не воспользоваться для чтения командой с кодом 0x03? Пример работы с этой флэш памятью есть, (но вне BF527). https://188.134.5.254/export/2746/hfreceiver/trunk/tests.c - начиная со строки 4006 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться