SMBus на ATTiny204

Поэтому я хочу подключить несколько светодиодных панелей с динамической адресацией к главному контроллеру. Похоже, SMBus должен быть в состоянии это сделать, однако я не нахожу никакой библиотеки для платформы Arduino. Требуется ли SMBus аппаратная реализация, и если она работает в программном обеспечении, есть ли для этого библиотека и работает ли она вообще на ATtiny?

, 👍-1

Обсуждение

SMBus и I2C-это почти одно и то же. Всего несколько спецификаций между ними. Итак... почему SMBus, а не I2C, который гораздо более распространен?, @Majenko

@Majenko, потому что мне действительно нужна функция ARP SMBus, которая позволяет мне использовать динамическую адресацию. Если есть более простое решение для динамической адресации, я бы тоже хотел это услышать, @Christopher

Только арбитражный модуль ATmega TWI (afaict) работает в основном режиме. Таким образом, вам придется написать немного потрепанную эмуляцию подчиненного устройства со встроенным арбитражем. Выполнимо, но нехорошо., @Majenko

@Majenko итак, есть ли лучшее решение?, @Christopher

ARP-твой главный камень преткновения. Однако, поскольку вам все равно нужно выделить UUID для каждого устройства, вы могли бы просто выделить уникальный адрес I2C для каждого устройства вместо этого? Затем вы можете просканировать шину I2C в поисках существующих адресов I2C., @Majenko

@Majenko да, я думал об этом, но диапазон адресов 7 бит/10 бит слишком мал для моего приложения. Вероятность того, что у меня есть две или более панелей с одним и тем же идентификатором, слишком высока, @Christopher

Однажды я разработал систему, основанную на одном направлении передачи UART (TX->RX) и одной индикации одного импульса в ответ с 24-битными адресами. Это позволило получить 16 миллионов уникальных адресов, и я разработал древовидный метод сканирования, позволяющий довольно быстро находить все устройства, присутствовавшие в шине, без необходимости перебирать все 16 миллионов адресов. Вы можете ознакомиться с моими мыслями о протоколе здесь: https://github.com/MajenkoProjects/LIBus/blob/master/PROTOCOL.md, @Majenko

@Majenko Интересная идея, я думал об UART, но с заводским набором и доставленными QR-кодами, которые содержат адреса для Мастера. Я не был уверен, что multi TX к одному RX работает электрически с UART. Спасибо!, @Christopher

От нескольких tx до одного rx *можно* сделать, но это сложно. Если вы хотите, чтобы это было так, возможно, RS485 был бы лучшим выбором., @Majenko


1 ответ


Лучший ответ:

1

Микросхемам AVR не хватает аппаратной поддержки арбитража шины при работе в качестве подчиненного устройства в I2C, что требуется для его работы в качестве SMBus с ARP.

Вам придется написать свой собственный бит-битный драйвер, чтобы он действовал как подчиненный, отслеживая контакт SDA всякий раз, когда он передает данные для поиска столкновений с шинами.

Лучшим решением было бы выделить каждому устройству уникальный адрес, используя выбранное вами адресное пространство (чтобы дать вам достаточно адресов для уникальности) во время сборки / программирования. Шину некоторой конструкции (возможно, RS485 был бы хорошим выбором для этого) затем можно сканировать в поисках и каталогизации используемых адресов.

,