Введение
Данная статья черновая. Здесь будут публиковаться полезные ссылки и промежуточные результаты.
Предыстория
Проектируя своего робота, я выбирал интерфейс между отдельными модулями робота (платы управления и переферийными устройствами). Самым лучшим на тот момент мне показался итерфейс i2c. При минимальном количестве проводов шина поддерживает подключение сразу нескольких устройств и работу на довольно приличной скорости (400 кБит/с). К тому же многие уже готовые модули (акселерометры, гироскопы, сонары) имеют выход i2c.
Но не всё оказалось так просто, как казалось...
Текущее положение дел
В результате определённых усилий были написаны собственный драйверы шины i2c (да... люблю я изобретать велосипед).
- Драйвер аппаратной поддержки i2c для управляющей платы at91sam9260 (режим Master). Драйвер ядра Linux, взаимодействующий с аппараным интерфейсом TWI микроконтроллера. Драйвер создаёт символьное устройство /dev/i2c, к которому можно обратится из userspace. Протокол обмена данных с драйвером в userspace свой собственный.
 - Userspace драйвер Linux. По сути небольшая обёртка, реализующая протокол обмена с драйвером ядра, и предоставляющая пользователю функции чтения и записи.
 - Драйвер для AVR- микроконтроллера переферийного устройства (режим Slave). Драйвер реализующий надстройку над i2c для передачи комманд и сообщений. Использовался для управления ультразвуковым измерителем и шасси робота.
 
На данный момент всё работает, но немного не так как хотелось бы, и уже достаточно трудно что-то улучшать/переделывать.
Задумки
Хотелось бы создать некую систему универсальных драйверов для простого использования. 
Планируется:
- Найти готовый драйвер ядра linux для контроллера at91sam9260. Или написать собственный, но в рамках существуюещей архитектуры и оперирующий существующими структурами системы i2c в ядре.
 - Написать протокол верхнего уровня, оперирующий более удобными структурами данных, и позволяющий производить контроль ошибок.
Возможно для этой цели подойдёт SMBus, или надстройка над ним. - Написать драйвер для микроконтроллера AVR, реализующий собственный протокол верхнего уровня.
 
В результате должен получится набор драйверов, позволяющий без существенный усилий общаться между AVR-микроконтроллером и Linux-хостом по более высокоуровневому протоколу с возможностью контроля ошибок.
Ваша помощь
Если у вас есть какая-нибудь информация по данной теме. Или мысли, или собственные решения. То, пожалуйста, оставляйте комментарии к статье, или пишите.
Надеюсь, что общими усилиями можно разработать что-то удобное и унивесальное.
Ссылки по теме
- Устройство и написание драйверов i2c ядра Linux (англ.) I2C Drivers, Part I и I2C Drivers, Part II.
 - Официальный сайт SMBus
 - Использование драйвера i2c-dev
 - Шина PMBus (Power management bus)
 - Драйвер i2c для at91sam9260
 - Патчи ядра Linux для AT91
 - I2C Tools - набор userspace утилит для проверки работы шины i2c
 - Применение микроконтроллеров AVR. Официальная документация и примеры кода