РЕШЕНО Stm32f4 discovery и sd-карточки

Тема в разделе "Arduino & Shields", создана пользователем Roman10, 13 апр 2020.

  1. Roman10

    Roman10 Нерд

    Пытаюсь научиться работать с SD-карточками, используя SD картридер от Амперки. С Ардуиной все работает нормально, но пытаюсь подключить к Discovery, и не получается... карточка наотрез отказывается инициализироваться. Использую библиотеку вот отсюда: https://eax.me/stm32-sdcard/.

    Весь прикол в том, что возникает ощущение, что где-то внутри Discovery на линии MISO произвольно меняется младший бит байта. Я и отладчиком смотрел, и логическим анализатором. Допустим, мы отправляем команду CMD8 и должны получить ответ 0x00, 0x00, 0x01, 0xAA. И по анализатору видно, что так оно и приходит. Но отладчик говорит, что получили 0x01, 0x00, 0x00, 0xAB. То есть младший бит испортился. Как такое бывает, вообще не понятно.

    Куда можно копать, подскажите пожалуйста.
     
  2. Roman10

    Roman10 Нерд

    Называется, сам спросил, сам ответил :D

    Короче, оказывается в STM32F4 баг :mad:. При работе SPI в определенных ситуациях (даже от температуры зависит) последний бит как-то там не захватывается, и в регистре остается значение бита предыдущего байта. Для решения предлагается:
    1) увеличить частоту работы пина, на котором сидит SPI CLK;
    2) уменьшить частоту работы шины APB.
    Пришлось реализовывать оба пункта, в итоге все вроде заработало. :p
     
    Daniil и arkadyf нравится это.