Сброс и инициализация встроенной ПЛИС
Для правильной работы микросхему ПЛИС (FPGA) нужно корректно сбросить и загрузить в неё исполняемый двоичный код. Поскольку у Tibbit-модулей M1 только четыре линии связи с процессором, выделенную линию сброса сделать не удалось. Поэтому сброс ПЛИС формируется манипуляциями с линиями -CS и SCLK.
Процедура сброса ПЛИС такова (за образцом см. tbt57_init() в файле tbt57_common.tbs проекта test_tibbit_57_sled):
- Установите линию -CS в HIGH.
- Установите линию SCLK в LOW.
- Установите линию SCLK в HIGH. Теперь ПЛИС находится в состоянии сброса.
- Выдержите небольшую паузу (необязательно).
- Установите линию -CS в LOW.
- Установите линию SCLK в LOW.
- Установите линию SCLK в HIGH. Теперь ПЛИС выведена из сброса.
Если всё это звучит туманно, вот принципиальная схема цепи сброса:

Цепь построена на D-триггере, тактируемом линией SCLK. Информационный вход D триггера подключён к линии -CS. Линия сброса ПЛИС (активный уровень LOW) берётся с инверсного выхода -Q триггера. Если установить -CS в HIGH и создать на линии SCLK передний фронт, триггер защёлкивается, и его инверсный выход -Q становится LOW. Микросхема ПЛИС переходит в состояние сброса. Чтобы вывести ПЛИС из сброса, нужно установить -CS в LOW и создать ещё один передний фронт на линии SCLK.
Когда ПЛИС выведена из сброса, не переключайте линию SCLK, пока линия -CS в HIGH (неактивна). Это не должно вызвать затруднений, так как формировать тактовые импульсы SPI при неактивном выборе микросхемы незачем.
После сброса в ПЛИС нужно загрузить исполняемый двоичный файл (за образцом см. tbt57_init() в файле tbt57_common.tbs проекта test_tibbit_57_sled). Какой именно двоичный файл загружать, зависит от нужной функции ПЛИС. Полный список имеющихся конфигураций приведён на странице «Реализованные конфигурации».
Ключевые моменты:
- Используется режим SPI 2; байты передаются старшим битом (MSB) вперёд.
- Байты исполняемого двоичного файла (IR_Remote_bitmap.bin) отправляются в ПЛИС один за другим.
- После отправки последнего байта программа формирует ещё 50 тактовых циклов. Зачем это нужно, неизвестно; мы просто следовали спецификации Lattice.
- После этого успех или неудача загрузки проверяется по линии DONE/MISO.
Как следует из названия, линия DONE/MISO выполняет две функции. Когда -CS активна (LOW), эта линия работает как стандартная линия MISO для функций SPI. Когда линия -CS в HIGH, по этой линии передаётся состояние выхода CDONE ПЛИС. Этот выход становится HIGH, если загрузка двоичного файла прошла успешно.