|
Пример работы с AT25DF641., Может у кого есть готовый исходник? |
|
|
|
May 21 2010, 13:44
|
Группа: Участник
Сообщений: 3
Регистрация: 22-03-10
Пользователь №: 56 121

|
Не поможет ли кто примерчиком общения с AT25DF641 флэшкой? Хочется побыстрее её запустуть, потому что дальше интереснее... но не получается. Взял пример от Атмела для АТ26, но он не работает. AT26_ReadJedecId(&at26); всегда возвращает 0. Вроде как всё просто, но как-то глухо
|
|
|
|
|
 |
Ответов
|
Sep 7 2011, 11:12
|
Участник

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814

|
Да. Получилось. Спасибо. А как тогда эта система работает при чтении/записи произвольных данных? Ведь там надо еще 3 байта адреса передавать + 2 dummy байта? Как это будет выглядеть? Так что ли? Чтение данных с адреса ХКод spi_rw(0x1B); spi_rw(X >> 16); spi_rw(X >> 8); spi_rw(X); spi_rw(0); //dummy 1 spi_rw(0); //dummy 2 for (...) { buf++ = spi_rw(0); }
Сообщение отредактировал yurmala - Sep 7 2011, 11:19
|
|
|
|
|
Sep 8 2011, 04:41
|
Участник

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814

|
Цитата(AHTOXA @ Sep 7 2011, 17:16)  Да, именно. (В четвёртом сообщении темы есть пример) Я его изначально за основу и взял, если честно. Но неопределенность с функциями spi_r8 и spi_w привела в тупик. Вот сейчас не получается добиться того чтобы прочитать из микросхемы записанный ранее байт. Функция записи получилась такая:Код uint8_t ssp_rw(uint8_t b) { SSP1DR = b; // передаём while ( !(SSP1SR & SSPSR_RNE) ); // ждём пока примется return SSP1DR; }
void at25_command(char cmd) { at25_SSEL_low(AT25_CS); ssp_rw(cmd); }
void at25_write_byte(uint32_t adr, uint8_t data) { at25_command(EE_WREN); at25_SSEL_high(AT25_CS); // toggle CS, necessary for WREN
at25_command(EE_WRITE); ssp_rw(adr >> 16); ssp_rw(adr >> 8); ssp_rw(adr); ssp_rw(data); at25_SSEL_high(AT25_CS); while (at25_read_status()& SS_WRITING); } Функция at25_write_byte() вроде отрабатывает без ошибок. Но при чтении этого байта - вместо мною записанного байта возвращается 0xFFФункция чтения:Код uint8_t at25_read_byte(uint32_t adr) { uint8_t result;
at25_command(EE_READ); ssp_rw(adr >> 16); ssp_rw(adr >> 8); ssp_rw(adr); result = ssp_rw(0); at25_SSEL_high(AT25_CS); return result; }
|
|
|
|
|
Sep 8 2011, 05:34
|
Участник

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814

|
Цитата(AHTOXA @ Sep 8 2011, 11:21)  Да вроде правильно всё... Может, ножка WP случайно на землю попала? это нет. у нас WP аппаратно висит на 3.3V Цитата(AHTOXA @ Sep 8 2011, 11:21)  ЗЫ. Обратите внимание, пример - для EEPROM, а у вас - FLASH. В EEPROM можно писать данные поверх старых значений, а FLASH надо стирать перед записью. Вот как у меня выполняется: Код ... at25_erase_4kb(0); at25_write_byte(0,22); read_byte = at25_read_byte(0);
...
void at25_erase_4kb(uint32_t adr) { at25_command(EE_WREN); at25_SSEL_high(AT25_CS); // toggle CS, necessary for WREN
at25_command(EE_ERASE4); // 0х20 ssp_rw(adr >> 16); ssp_rw(adr >> 8); ssp_rw(adr); at25_SSEL_high(AT25_CS); while (at25_read_status()& SS_WRITING); }
|
|
|
|
|
Sep 8 2011, 06:28
|
Участник

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814

|
Цитата(AHTOXA @ Sep 8 2011, 12:04)  Не вижу ошибок. Unprotect Sector - вряд ли. Global Protect/Unprotect - тем более. Остаётся посмотреть осциллографом, может всё-таки функция ssp_rw() как-то не так работает. (Или дождаться того, кто работал с LPC2468) AHTOXA, ты прав. Sector Protect Register выдал мне 0xFF - сектор защищен. Unprotect Sector помог. Спасибо тебе огромное. Добавленные функции: Код uint8_t at25_read_protect_register(uint32_t adr) { uint8_t result; at25_command(EE_RDPR); ssp_rw(adr >> 16); ssp_rw(adr >> 8); result = ssp_rw(adr); result = ssp_rw(0); at25_SSEL_high(AT25_CS); return result; }
void at25_Unprotect_Sector(uint32_t adr) { at25_command(EE_WREN); at25_SSEL_high(AT25_CS); // toggle CS, necessary for WREN
at25_command(EE_UNPROTECT); ssp_rw(adr >> 16); ssp_rw(adr >> 8); ssp_rw(adr); at25_SSEL_high(AT25_CS); while (at25_read_status()& SS_WRITING); }
|
|
|
|
Сообщений в этой теме
tMauzer Пример работы с AT25DF641. May 21 2010, 13:44 zltigo Цитата(tMauzer @ May 21 2010, 16:44) Хоче... May 21 2010, 14:10 tMauzer Железо - это практически копия at91sam7x-ek. На SP... May 21 2010, 14:36 AHTOXA Цитата(tMauzer @ May 21 2010, 19:44) Не п... May 21 2010, 14:46 tMauzer AHTOXA, ОГРОМНОЕ СПАСИБО!!!
А в амело... May 21 2010, 14:51 GrigaN Цитата(tMauzer @ May 21 2010, 20:51) AHTO... Dec 4 2010, 18:05 Genadi Zawidowski at91lib_20100901_softpack_1_9_v_1_0_svn_v15011.zip... Dec 4 2010, 20:37 yurmala Здравствуйте! Не буду создавать новую тему, сп... Sep 7 2011, 06:47 AHTOXA Не устану повторять:
SPI - такая штука:
Чтобы что-... Sep 7 2011, 07:58  yurmala Цитата(AHTOXA @ Sep 7 2011, 13:58) Не уст... Sep 7 2011, 08:23   AHTOXA Именно! Sep 7 2011, 09:02 yurmala Как-то странно все пока...
Поменял код:
Кодvolatil... Sep 7 2011, 09:06 yurmala Получилось вот с таким кодом. Но не могу понять от... Sep 7 2011, 10:27 AHTOXA Цитата(yurmala @ Sep 7 2011, 16:27) Может... Sep 7 2011, 10:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|