STM32 + FatFS + SDIO + CubeMX - PullRequest
       40

STM32 + FatFS + SDIO + CubeMX

0 голосов
/ 08 января 2019

Я пытаюсь подключить SD-карту в 1-битном режиме к Stm32l4 через интерфейс FatFS + SDIO. Код автоматически генерируется CubeMX 5.0. DMA включен и настроен в Cube. Когда я вызываю функцию FatFS, такую ​​как f_mount () или f_open (), я получаю FR_DISK_ERR оператор возврата. Чтение низкого уровня возвращается DMA_Timeout . Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 05 марта 2019

Итак, для начала вам следует взглянуть на документацию ST о том, как точно перемещать дерево процессов с помощью SD-карты. Я знаю, что с USB вы должны вызвать хост-процесс и дождаться, пока состояние хоста станет активным, прежде чем можно будет делать какие-либо вызовы FATFS. Убедитесь, что вы находитесь на земле, ожидая аппаратных прерываний, чтобы вызвать присутствие.

Что-то похожее на эффект, просто убедитесь, что у вас есть параметр тайм-аута, если корпус SD не монтируется.

// stateOfHost will change depending on the cube generated code, but it should be somewhere in the SD Card code
extern ApplicationTypeDef stateOfHost;

// Set the default state to idle
ApplicationTypeDef stateOfHost = APPLICATION_IDLE;

while(1)
{
    // Start USB Host Process 
    MX_USB_HOST_PROCESS();

    if(stateOfHost == HOST_USER_CLASS_ACTIVE)
    {
        // FATFS Can now be called
    }
}

Если после этого ничего не получится, это может звучать немного странно, но попробуйте увеличить размер стека по умолчанию. Тайм-аут DMA появляется, потому что обратный вызов для диска не вызывается. Не было данных для заполнения. Попытка отладки с помощью этой реализации FATFS - это кошмар.

У USB OTG и стороннего промежуточного программного обеспечения FATFS на SD-карте возникают проблемы, если размер стека не превышает установленного по умолчанию значения 0x400.

Внутри файла startup_stm32l4 (xx) xx.s (два х в скобках относятся к вашему варианту L4), измените размер стека на подходящий. Для начала попробуйте 0x1000.

У меня были похожие проблемы, и мне пришлось увеличить размер стека до 0x3000, чтобы заставить работать мой USB.

Если SD-карта распознана, убедитесь, что вы создали переменные для отслеживания всех ваших вызовов FATFS, чтобы убедиться, что все это успешно.

Чтобы читать через FATFS, вы должны: 1. Смонтировать рабочее пространство (f_Mount) 2. Откройте файл (f_open) 3. Считайте файл открытым (f_read)

Запись производится точно так же, просто меняются с вызовом чтения.

Надеюсь, это поможет.

...