
Zynq 7000. Переносим I2C Master Controller. Работа над ошибками и утилиты userspace
andreyzaostrovnykh 25 минут назад Zynq 7000. Переносим I2C Master Controller. Работа над ошибками и утилиты userspace Средний 81 мин 867 Блог компании Beget FPGA * Производство и разработка электроники *...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: andreyzaostrovnykh 25 минут назад Zynq 7000. Переносим I2C Master Controller. Работа над ошибками и утилиты userspace Средний 81 мин 867 Блог компании Beget FPGA * Производство и разработка электроники * Программирование микроконтроллеров * Электроника для начинающих Кейс В прошлой статье мы собрали готовый образ Linux и запустили I2C Master Controller который живет в ПЛИС и управляется драйвером предоставляющим в ОС доступ к нему как типовому I2C-контроллеру.
В этой, заключительной части из общей серии статей, я хотел бы филигранно отшлифовать все мелкие недочеты и привести примеры утилит, которые могли бы отправлять нужные нам данные на I2C OLED-дисплей SSD1306, например температуру кристалла, время или что-нибудь еще. Всем кому интересна тема - го под кат! Перед началом повествования, хотелось бы заранее оговориться, что основная цель, которую я преследую при написании этой статьи - рассказать о своем опыте, с чего можно начать, при изучении отладочных плат на базе Zynq.
Технические детали
Я не являюсь профессиональным разработчиком под ПЛИС и SoC Zynq, не являюсь системным программистом под Linux и могу допускать какие-либо ошибки в использовании терминологии, использовать не самые оптимальные пути решения задач, etc. Но отмечу, что любая конструктивная и аргументированная критика только приветствуется. ВступлениеВ прошлых статьях мы собрали первый работающий вариант проекта: подготовили аппаратную часть в Vivado, добавили в PL собственный I2C Master Controller, подключили его к процессорной системе Zynq через AXI и запустили Linux, в котором этот IP-блок стал виден как обычный I2C-контроллер.
Мне не хотелось писать отдельный узкоспециализированный драйвер только под OLED-дисплей, а пришла идея сделать кажущуюся более правильной интеграцию. IP-ядро в ПЛИС должно выглядеть для Linux как стандартный I2C master adapter. После этого все, что находится на этой I2C-шине, может обслуживаться уже обычными механизмами ядра: через Device Tree, I2C subsystem и существующие драйверы устройств.
В нашем случае на эту шину подключен OLED-дисплей SSD1306 с адресом 0x3C. Подробное отражение архитектуры проекта я составил в облюбованном мной Mermaid следующим образом:И в финальной точке я хотел получить не просто факт обмена байтами по I2C, а нормальное Linux-устройство /dev/fb0, на которое можно выводить текст, часы, диагностические паттерны, температуру кристалла, uptime или любую другую небольшую статусную информацию. На первый взгляд после прошлой статьи оставалось сделать совсем немного: написать маленькую userspace-утилиту, открыть framebuffer, нарисовать пару строк текста и вывести их на OLED.
Но при переходе от "первого запуска" к более аккуратному и воспроизводимому состоянию обнаружилось несколько мелких, но важных недочетов. Загрузчик стартовал, UART-консоль работала, SD-карта определялась, но в логе были строки которые надо было шлифануть:U-Boot 2024. 01 (Jun 04 2026 - 04:40:03 +0300) CPU: Zynq 7z020 Silicon: v3.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





