Arduino Nano Every ПОРТ I2C PORTMUX

i2c atmega

Arduino Nano Every схема сообщает нам, что мы можем использовать контакты ATmega4809 PF03 и PF02 для связи через I2C.

В руководстве ATmega4809 говорится, что для использования этих контактов в качестве I2C нам нужно использовать PORTMUX.

Я на самом деле не эксперт и не понимаю, как это сделать. Любая помощь будет одобрена.

, 👍1


1 ответ


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

2

В схеме Nano Every PF2 и PF3 соединены с PA2 и PA3 соответственно. То есть вывод Arduino A5 и вывод ATmega4809 PF03 и PA03 соединены вместе дорожками печатной платы таким образом, что между ними нет никакого различия, PF03 не имеет своего собственного вывода заголовка нигде, кроме PA03. Они оба А5. Аналогично для Arduino pin A4 и ATmega4809 pin PF02 и PA02.

Nano Every был разработан так, чтобы быть совместимым с оригинальными Нано-платами, использующими ATmega328P. На этих платах вывод A5, способный к аналоговому чтению, также является тактовым сигналом I2C/Wire. Кроме того, A4, pin-код с поддержкой analogRead, также является сигналом данных I2C/Wire.

На ATmega4809 сигналы I2C/Wire Master/Slave на PORTA, направляемые на контакты A5 и A4, также неподдерживают analogRead. То есть они не подключены к аналого-цифровому преобразователю в микросхеме, как это было в ATmega328P на старых платах Arduino Nano.

Чтобы отразить работу оригинального Nano, где A4 и A5 были как аналоговыми штифтами, так и штифтами I2C/Wire Master/Slave, они подключили A4 и A5 к парам штифтов ATmega4809. Один из этих контактов на портуF подключен, чтобы сделать Arduino pin analogRead-способным, а другие контакты на портуA подключены, чтобы сделать Arduino pin Wire/I2C Master/Slave способным. Другими словами, они использовали два штифта AVR для синтеза одного штифта Arduino, способного выполнять обе функции, которые были доступны на этом штифте на старых платах Nano.

Когда дело доходит до использования PORTMUX для переключения выбора контактов I2C, практически говоря, вы не сможете этого сделать, если хотите получить альтернативные контакты для TWI Master. PORTMUX позволяет переключать I2C Master/Slave или просто Master peripheral на контакты PC2 и PC3 вместо PA2 и PA3. Но, в Nano Every схеме, вы можете видеть, что они не связаны ни с чем. Поэтому, если бы вы захотели это сделать, это означало бы что-то вроде пайки проводки-обмотки провода непосредственно к контакту MCU, что было бы трудно. И PC2 и PC3 являются единственными двумя другими выводами ATmega4809, к которым PORTMUX будет направлять аппаратную I2C Master/Slave периферию. Так что, практически говоря, если вы хотите, чтобы I2C любые контакты, кроме A4 и A5, на Nano Every, это означает использование программной (бит-бит) реализации I2C.

Вы спросили (в комментариях) о поддержке TWI, указанной на PF2 и PF3 в спецификации ATmega4809. Я думаю, что либо смотрел на более старую таблицу данных, либо, возможно, игнорировал эти контакты из-за того, как они жестко подключены к порту на Нано-устройстве. ATmega4809 имеет режим "Dual TWI", по-видимому, где вы можете иметь только основной режим на контактах, которые обычно являются обоими, и только ведомый режим на альтернативном наборе контактов. В двух конфигурациях PORTMUX под двойным TWI PF2 и PF3 находятся там, где нарушаются только ведомые возможности периферийного устройства. С отключенными TWI-контактами PORTC и TWI-контактами PORTA, подключенными к TWI-контактам PORTF, мне непонятно, какое преимущество вы могли бы получить, меняя PORTMUX на Arduino Nano Every.

,

Хорошо, спасибо за информацию. Тем не менее, как я могу заставить связь I2C использовать контакты PF2 и PF3 вместо PA2 и PA3?, @Miguel

Вероятно, я недостаточно ясно выразился в этой части. На схеме Nano Every вы можете видеть, что эти контакты жестко соединены друг с другом. Это означает, например, что контакты Arduino A5 *и* ATmega4809 портов PF03 *и* PA03 являются одним и тем же узлом в цепи, соединенным вместе медными следами. В этом и заключается смысл применения метки A5/SCL ко всем трем вещам., @timemage

Это я понимаю. Я знаю, что они оба подключены, но я делаю некоторые тесты и хочу проверить связь I2C с выводами PF2 и PF3. Я думаю, что это должен быть способ поменять местами контакты, которые будут использоваться, например, библиотекой " Провод`. Это то, что я ищу., @Miguel

У меня такое впечатление, что я еще кое-что не прояснил. Я действительно вернулся назад и перефразировал некоторые вещи, чтобы попытаться сделать их более прямыми, а именно, что существует только *два* набора контактов, к которым может быть направлена аппаратная поддержка I2C, и только один из этих наборов припаян к чипу. Это то, что я обновил в последнем абзаце., @timemage

Ладно, спасибо. Но в этом случае почему datasheet ATmega4809 сообщает на странице 19, что PF2 и PF3 способны к I2C?, @Miguel

Интересно, я думаю, что я смотрел на несколько различных изданий таблицы. В том, который вам понравился выше, я вижу (Ы) и (МС), которые, как я предполагаю, являются "рабом" и "хозяином". Я свяжусь с вами по этому поводу, может быть, обновлю ответ тем, что найду., @timemage

Давайте [продолжим эту дискуссию в чате](https://chat.stackexchange.com/rooms/121092/discussion-between-timemage-and-miguel)., @timemage