Введение

Данная статья черновая. Здесь будут публиковаться полезные ссылки и промежуточные результаты.

Предыстория

Проектируя своего робота, я выбирал интерфейс между отдельными модулями робота (платы управления и переферийными устройствами). Самым лучшим на тот момент мне показался итерфейс i2c. При минимальном количестве проводов шина поддерживает подключение сразу нескольких устройств и работу на довольно приличной скорости (400 кБит/с). К тому же многие уже готовые модули (акселерометры, гироскопы, сонары) имеют выход i2c.

Но не всё оказалось так просто, как казалось...

Текущее положение дел

В результате определённых усилий были написаны собственный драйверы шины i2c (да... люблю я изобретать велосипед).

  • Драйвер аппаратной поддержки i2c для управляющей платы at91sam9260 (режим Master). Драйвер ядра Linux, взаимодействующий с аппараным интерфейсом TWI микроконтроллера. Драйвер создаёт символьное устройство /dev/i2c, к которому можно обратится из userspace. Протокол обмена данных с драйвером в userspace свой собственный.
  • Userspace драйвер Linux. По сути небольшая обёртка, реализующая протокол обмена с драйвером ядра, и предоставляющая пользователю функции чтения и записи.
  • Драйвер для AVR- микроконтроллера переферийного устройства (режим Slave). Драйвер реализующий надстройку над i2c для передачи комманд и сообщений. Использовался для управления ультразвуковым измерителем и шасси робота.

На данный момент всё работает, но немного не так как хотелось бы, и уже достаточно трудно что-то улучшать/переделывать.

Задумки

Хотелось бы создать некую систему универсальных драйверов для простого использования.
Планируется:

  1. Найти готовый драйвер ядра linux для контроллера at91sam9260. Или написать собственный, но в рамках существуюещей архитектуры и оперирующий существующими структурами системы i2c в ядре.
  2. Написать протокол верхнего уровня, оперирующий более удобными структурами данных, и позволяющий производить контроль ошибок.
    Возможно для этой цели подойдёт SMBus, или надстройка над ним.
  3. Написать драйвер для микроконтроллера AVR, реализующий собственный протокол верхнего уровня.

В результате должен получится набор драйверов, позволяющий без существенный усилий общаться между AVR-микроконтроллером и Linux-хостом по более высокоуровневому протоколу с возможностью контроля ошибок.

Ваша помощь

Если у вас есть какая-нибудь информация по данной теме. Или мысли, или собственные решения. То, пожалуйста, оставляйте комментарии к статье, или пишите.

Надеюсь, что общими усилиями можно разработать что-то удобное и унивесальное.

Ссылки по теме

 

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