|
Опять SD карта, проблема с CMD17 |
|
|
|
Jan 26 2012, 15:38
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Всем привет!
Проблема с SD картой, работаю в режиме SPI на частоте 4MHz.
С иницилизацией как-то гладко все получилось. Шлю команды CMD0, CMD8, CMD55, ACMD41, CMD16 со всей сопутствующей логикой – читаю OCR регистр анализирую биты Busy и CCS, отличаю CDHC и SDSC, смотрю режим адресации, при необходимости выставляю 255 байт.
Проблемы начинаются при попытке прочитать сектор CMD17. Сначала вычитываю R1=00, потом жду 0xFE и читаю 255 байт.
Две карты читаются замечательно (SDHC 4Gb и SDSC 1Gb).
А две карты (SDSC 2Gb и SDSC 128Mb) возвращают полную ерунду – 99% байт не совпадают с реальным содержимым нулевого сектора, а два последних байта почему-то всегда совпадают 0x55, 0xAA.
Подобная ситуация воспроизводится и с нулевым сектором и с любым другим, т.е. режим адресации, вроде, не причем.
Может у кого-то было что-то похожее? Уже не знаю, что делать…
|
|
|
|
|
 |
Ответов
|
Jan 27 2012, 04:12
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата(aaarrr @ Jan 26 2012, 19:51)  Если с нулевым, то можно заподозрить путаницу с нулевым логическим/физическим. А вообще, включите CRC - все сразу станет понятно. А разве CMD17 может работать с логическими секторами??? Это же понятие структуры FAT, ни контроллер ни CMD17 понятия не имеют о FАT. Или я что-то путаю? На отправку команды - вставлял корректный код CRC7, та-же картина, на прием - не пробовал это'ж надо код для подсчета CRC16 написать.
|
|
|
|
|
Jan 27 2012, 11:19
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(AndreyVN @ Jan 27 2012, 08:12)  А разве CMD17 может работать с логическими секторами??? Это же понятие структуры FAT, ни контроллер ни CMD17 понятия не имеют о FАT. Или я что-то путаю? Я имел в виду путаницу в той части, в которой вы смотрите "реальное" содержимое сектора. Карта, разумеется, ничего не знает о структуре диска. Цитата(AndreyVN @ Jan 27 2012, 08:12)  На отправку команды - вставлял корректный код CRC7, та-же картина, на прием - не пробовал это'ж надо код для подсчета CRC16 написать. Да что там этого кода: Код const unsigned short sd_crc16_table_a[16] = { 0x0000, 0x1231, 0x2462, 0x3653, 0x48c4, 0x5af5, 0x6ca6, 0x7e97, 0x9188, 0x83b9, 0xb5ea, 0xa7db, 0xd94c, 0xcb7d, 0xfd2e, 0xef1f };
const unsigned short sd_crc16_table_b[16] = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef };
unsigned short sd_crc16(unsigned char *buff, unsigned int len) { unsigned char data; unsigned short crc = 0;
while(len--) { data = *buff++ ^ (crc >> 8); crc = (sd_crc16_table_a[(data & 0xf0) >> 4] ^ sd_crc16_table_b[data & 0x0f]) ^ (crc << 8); } return crc; }
|
|
|
|
|
Jan 27 2012, 11:31
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата(aaarrr @ Jan 27 2012, 15:19)  Я имел в виду путаницу в той части, в которой вы смотрите "реальное" содержимое сектора. Карта, разумеется, ничего не знает о структуре диска. Это могло-бы все объяснить! Смотрю, действительно, через карт-ридер и WinHex. Цитата Да что там этого кода: Спасибо!!! О результатах доложу.
|
|
|
|
Сообщений в этой теме
AndreyVN Опять SD карта Jan 26 2012, 15:38    AndreyVN Цитата(AndreyVN @ Jan 27 2012, 15:31) Это... Jan 27 2012, 18:13     aaarrr Цитата(AndreyVN @ Jan 27 2012, 22:13) Фак... Jan 27 2012, 18:26      AndreyVN Цитата(aaarrr @ Jan 27 2012, 22:26) Может... Jan 27 2012, 19:28      AndreyVN - Jan 27 2012, 19:28 aaarrr Дык это таблица разделов с одним разделом FAT32 на... Jan 27 2012, 19:49 AndreyVN Цитата(aaarrr @ Jan 27 2012, 23:49) Дык э... Jan 28 2012, 07:11 aaarrr 0x0B - FAT32
Откройте её в WinHEX'е как физич... Jan 28 2012, 09:44 AndreyVN Цитата(aaarrr @ Jan 28 2012, 12:44) Откро... Jan 28 2012, 10:37
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|