Инициализация карты проходит успешно. Карта SD v.2 на 2 Гб.
Но вот с чтением блоков, похоже что-то упустил...
Алгоритм такой:
1) Ногу CS в нуль
2) Отправляю 0xFF
3) Отправляю команду CMD17 (0x51 0x00000000 0x00 - читаю нулевой адрес)
4) В цикле отправляю 0xFF и жду ответа 0x00
5) Ответ приходит 0x00 (все ОК - я счастлив)
6) В цикле жду метку 0xFE (метка пришла)
7) Читаю 512 байт (и тут фигня полная...)
В массиве какие-то левые данные....
Может кто встречался, помогите плиз.
Проект генерировался через CubeMX, написано на HAL.
Может у кого проект есть в качестве примера?
За ранее благодарен.
P.S. Уважаемый Aveal - не удаляйте эту тему плиз, как вы это сделали с моим комментарием под статьей про SD карту.
Добрый вечер!
Да я вроде бы не удаляю информативные комментарии по теме... И в корзине нет никакого комментария к той статье.
А данные предварительно записываются в этот сектор? Или карта очищена полностью?
Карта отформатирована в fat32 c размером сектора 512 байт
Через winhex, смотрю что записано в первом секторе на карте. таблица начинается с 0xEB и т.д.
А у меня начинается 0x09 0x23 0xFF 0xFF 0xFF 0xFF 0xFF и так повторяется.
И если читаешь любой другой сектор, то же самое. Либо где-то ошибся, либо что-то не учел. Вот пока не могу понять...
функция чтения:
DRESULT USER_read (BYTE pdrv, BYTE *buff, DWORD sector, UINT count)
{
u8 bfRx[1] = {0xff};
SD_CS_OFF();
if(SD_Spi_Transmit_Cmd(CMD17, 0x00000000) == OK)
{
while(bfRx[0] != 0x00)
{
SD_Spi_Transmit_Byte(0xFF);
SD_Spi_Receive_Bytes(bfRx, 1);
}
while(bfRx[0] != 0xFE)
SD_Spi_Receive_Bytes(bfRx, 1);
if(SD_Spi_Receive_Bytes(buff, 512) == OK)
return RES_OK;
}
else return RES_ERROR;
return RES_ERROR;
}
а файлы прикреплять нельзя?
Aveal, может вы согласитесь посмотреть проект целиком? Там только модули spi и fatfs подключены.
Заклинило, никак не могу найти ошибку.
Еще интересная вещь... Окончание инициализации проходит успешно как при отправке ACMD41, так и по команде CMD1. Но при чтении блока та же фигня...
0x09 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x82 0x7F 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xE0 0x9F 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x8F 0x27 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFE 0x09 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
Т.е. прочитанные данные не соответствуют реальным данным на карте в нулевом секторе.
Добрый вечер!
Конечно,могу посмотреть проект. Только на практике не получится проверить, нет платы подходящей...
Можно кстати на сайте ST поискать примеры для SD карты по SPI. Примеры для SPL, но последовательность команд там можно проверить.