Top.Mail.Ru
Уведомления
Очистить все

[Решено] Работа с SD картой по SPI

 v1
(@v1)
New member

Инициализация карты проходит успешно. Карта 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 карту.

Цитата
Создатель темы Размещено : 18.04.2016 22:16
Aveal
(@aveal)
Top level Admin

Добрый вечер!

Да я вроде бы не удаляю информативные комментарии по теме... И в корзине нет никакого комментария к той статье.

А данные предварительно записываются в этот сектор? Или карта очищена полностью?

ОтветитьЦитата
Размещено : 19.04.2016 01:00
 v1
(@v1)
New member

Карта отформатирована в 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;
}

а файлы прикреплять нельзя?

ОтветитьЦитата
Создатель темы Размещено : 19.04.2016 01:36
 v1
(@v1)
New member

Aveal, может вы согласитесь посмотреть проект целиком? Там только модули spi и fatfs подключены.
Заклинило, никак не могу найти ошибку.

ОтветитьЦитата
Создатель темы Размещено : 19.04.2016 17:44
 v1
(@v1)
New member

Еще интересная вещь... Окончание инициализации проходит успешно как при отправке 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

Т.е. прочитанные данные не соответствуют реальным данным на карте в нулевом секторе.

ОтветитьЦитата
Создатель темы Размещено : 19.04.2016 18:32
Aveal
(@aveal)
Top level Admin

Добрый вечер!

Конечно,могу посмотреть проект. Только на практике не получится проверить, нет платы подходящей...

Можно кстати на сайте ST поискать примеры для SD карты по SPI. Примеры для SPL, но последовательность команд там можно проверить.

ОтветитьЦитата
Размещено : 20.04.2016 00:48
Поделиться: