STM32&FPGA: Сказка о потерянном времени

Если честно, я потихоньку начинаю ненавидеть ST…
Если предыстория не интересна, jmp ТУДА
Сначала, выяснилось что к STM32F103ZET6 можно подцепить только один энкодер, чтобы аппаратрой считал с учетом направления вращения, ладно, хрен с ним, один фиг у нас есть ПЛИС и это сказано в DS.
Но вот этот эпический баг стоил мне нескольких часов жизни. Итак, предыстория. Для использования в роботе мы запилили бордень: STM32F103ZET6 + Xilinx XC100E FPGA на шине памяти. По счастью, сэкономили и поставили 8 бит шину данных.

Борда прибыла, была спаяна и началось веселье. Особенно с приближением дедлайна. Я побыстренькому портанул свой xsscu драйвер для работы на STM32, собрал тулчейн с newlib’ом и прочим хламом, поднял SPI флешину для хранения проши плиса, и тут…
Вот тут начался треш: Как только я настроил FSMC, начались жуткие проблемы. Цикл чтения проходит, а данные лезут левые. Сначала убил энное время на прозвонку и поиск КЗ, но не тут-то было. Пришлось лезть в схему и разбираться.

  • Сначала была мысль о косяке в UCF файле. Но тут все было хорошо.
  • Потом мысль что товарищ накосячил в своей части схемы (часть с мк рисовал он)
  • Наконец в своих проблемах я обвинил leaflabs, ибо от них утащил символ еесхемы для этого контроллера.
  • А потом я догадался почитать даташит

ТУДА:
И вот тут мой гнев вылился в адрес ST. ДАТАШИТ НАГЛО ВРЕТ: распиновка битов данных там некорректно указана, Они нахрен перепутаны (Хорошо, что хоть на тех же ногах висят). Немного поковырявшись, поредактировав UCF, я получил примерно следующую таблицу соответствия

1->1
2->3
3->2
4->7
5->6
6->5
7->4

Хоть бы слово в еррате написали.
И самый треш в том, что этого не заметишь, если у тебя память срам, или nor, все будет работать. А вот если ПЛИС, строящая из себя срам…
Это все на данный момент в процессе допила и тестирования, позже выложу полную таблицу цоколевки вместе с кодом инициализации FSMC, который юзал, надо еще все перепроверить, вдруг это уже галлюцинации? (с)

Ну а пока еще несколько фоток уже собранной бордени:

 

Print Friendly

STM32&FPGA: Сказка о потерянном времени: 1 комментарий

  1. Привет.
    У меня примерно такая же борда, стоит STM32, ОЗУ-шка и ПЛИС Спартан6.
    ОЗУ-шка и ПЛИС Спартан6 подключены к STM32 через FSMC.
    В ПЛИС реализована память(BRAM IP).
    Для доступа к ней нужен сигнал CLK и он имеется в наличии у FSMC в режиме SRAM.
    Но у меня не получается его вывести наружу.
    Можешь подкинуть кусок исходников по инициализации STM32 FSMC.
    Или между FSMC и BRAM в ПЛИС требуется добавить логику?
    Заранее спасибо.

Добавить комментарий