I2 C на Arduino Nano и на STM32 Blue Pill не может обнаружить все устройства - PullRequest
0 голосов
/ 01 мая 2020

У меня странная проблема с устройствами I2 C. Я использовал RT C (DS3231 + 24LC32 EEPROM), 1,3-дюймовый OLED-дисплей на основе SSH1106 и тактовый генератор Si5351 на той же шине I2 C. Их соответствующие адреса: 0x68 , 0x57 , 0x3 C и 0x60 .

На Arduino, используя интерфейс 5 В и V cc для модулей, сканер I2 C правильно обнаружил все устройства (все они - устройства 3,3 В, а модули содержат стабилизаторы с низким падением и сдвиг уровня, должен работать как на 5 В, так и на 3,3 В I2 C шина). В i2c_scanner эскизе все устройства обнаружены правильно. Когда я использовал RT C, библиотеку U8Glib2 для установки OLED и Si5351 в одном эскизе, дисплей не инициализировался, и Si5351A не выдавал никакого сигнала.

Я думал, что это произошло из-за переполнения стека, поскольку устройство Arduino имеет только 2 КБ ОЗУ, а компилятор сообщил об использовании 1980-байтовой памяти для динамических c переменных. Когда я переписал весь эскиз, чтобы использовать упрощенную библиотеку U8x8 (не использует буфер ОЗУ для отображаемых данных), я получил рабочую программу, способную как отображать необходимую информацию, так и управлять Si5351A.

Затем я взял два модуля, Si5351 и OLED с макета и подключил их к плате STM32 (Blue Pill). Интересно, что i2c_scanner обнаружил OLED (addr 0x3 C) до того, как я подключил Si5351A. После того, как я подключил Si5351, он перестал обнаруживать OLED: - (

Есть идеи, как это возможно? Особенно, почему в AVR-версии библиотеки Wires это работает, а в версии STM32 - нет? И почему там? кажется, что конфликт между устройством с адресом 0x3 C и 0x60 (последний, кажется, "переопределяет" бит ACK при обращении к 0x3 C, что не должно быть возможно, если это действительно шина I2 C ...)

Кроме того, печатная плата модуля дисплея OLED указывает, что его адрес I2 C должен быть 0x7E ( 0x3 C << 1), поэтому кажется, что между 7-битными и 8-битными адресами есть некоторая путаница. </p>

Я пытался найти объяснение в различных дискуссиях и уроках сообщества. , но безрезультатно.

Я так растерялся ..

...