Создаем I2C Master Controller на Verilog. Идея и физический уровень

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
В рамках изучения Verilog я выбрал для себя интересную и полезную задачу, которую изначально планировал решить в рамках цикла статей по Xilinx Zynq. На отладочной плате, на которую я делал обзор в предыдущих статьях, есть OLED дисплей SSD1306 который управляется по I2C. Я решил, что было бы круто вывести на него какую-нибудь информацию из Linux, например температуру или загрузку CPU. Но чтобы это сделать — полезной информации нужно пройти путь через от Userspace до I2C Master Controller который управляет SSD1306. И вот реализацию этого самого контроллера из этой связки я хотел бы описать в этом цикле статей.

И немного поразмыслив — я подумал, что на этапе разработки этого модуля быстрее было бы его реализовать плате с ПЛИС Altera. Уж очень долго собирается bitstream-файл под Zynq. А в качестве тестового подчиненного устройства — буду использовать EEPROM и по мере готовности задачи — потом просто перенесу модуль в Vivado.

В как раз о том, что такое I2C, как я реализовывал Master Controller для работы с подчиненным устройством, чем руководствовался и что получилось — я опишу для вас в этой и последующих статьях.

Традиционно, кому интересно — добро пожаловать под кат! =)

image

Дисклеймер. Перед началом повествования, хотелось бы заранее оговориться, что основная цель, которую я преследую при написании этой статьи — рассказать о своем опыте. Я не являюсь профессиональным разработчиком под ПЛИС на языке SystemVerilog и могу допускать какие-либо ошибки в использовании терминологии, использовать не самые оптимальные пути решения задач, etc. Но отмечу, что любая конструктивная и аргументированная критика только приветствуется. Что ж, поехали…

Постановка задачи


Итак. Основная задача, которая передо мной стоит — это вывести информацию из Linux на OLED-дисплей который расположен на плате Zynq Mini, который подключен к PL-части Zynq.

Чтобы решить эту задачу, мне, как новичку, нужно научиться очень многому и проделать очень много работы:

  • Сделать I2C Master Controller, который будет непосредственным связующим звеном между OLED-дисплеем и логикой в ПЛИС;
  • Сделать контроллер, который будет разгребать данные приходящие из Linux, складывать их в framebuffer и потом посылать их через I2C Controller в дисплей, а также инициализировать его, управлять им, реагировать на возможные ошибки и т.п.;
  • Связать логику в ПЛИС с драйвером в Linux;
  • Создать драйвер для Linux и прикладную программу которые будут формировать нужную мне информацию, преобразовывать ее в подходящий для вывода на дисплее формат и отсылать ее в ПЛИС.

Первым шагом я решил реализовать I2C Master Controller. Задача, которая стоит передо мной на этом этапе делится еще на несколько подзадач:

  • Познакомиться с I2C, разобраться как с ним работать и что он из себя представляет на физическом и логическом уровне;
  • Описать логику работы state-машины и спроектировать конечный автомат;
  • Протестировать и отладить полученный результат.

В ходе выполнения всех этих шагов я попытаюсь сделать подробное описание того, как я продумывал решение, проектировал необходимые компоненты и модуле и, в итоге, реализовывал эту сложную и объемную задачу. Возможно, мой опыт поможет тем, кто не знает как подступиться к проектированию подобных вещей и узнает что-то новое. Кстати, это будет мой первый конечный (надеюсь, что не конченый
Источник: https://habr.com/ru/companies/timeweb/articles/750292/


Интересные статьи

Интересные статьи

Похоже, компанию Kincony уже не остановить — она вышла на крейсерскую скорость и выдаёт на-гора новые контроллеры чуть ли не каждую неделю. Причём это не стандартные «унылые» девайсы, а в полном с...
Всем привет! Меня зовут Хусрав, я бэкенд разработчик в компании Bimeister.В этой статье я бы хотел бы поговорить о способе поиска родительских и дочерних элементов структуры посредством PostgreSQL Mat...
С архитектурой приложений часто возникают вопросы. Это касается как приложений пакетной обработки (batch job), веб-приложений, так и приложений с обменом сообщениями (messaging application) и других. ...
В этой статье речь пойдет о специальных тегах, которые вы можете использовать для сборки динамических шаблонов в MastermindCMS2. За свою карьеру программиста я видел множество разных технологий и фрей...
В этой статье я дам рекомендации по созданию платёжных форм, которые будут выгодно отличаться от форм ваших конкурентов. Каждый пункт рекомендаций будет сопровождаться примером кода. По...