Квадратному контроллеру - две квадратных шины
Интерфейс Inter-Integrated circuit или I2C на сленге часто называют "квадратная шина". Такая периферия имеется на контроллерах STM8 и STM32. Не будем кривить душой, но при разработке этой периферии инженеры компании STMicroelectronics неплохо отдохнули, подкинув работы тем, кто пишет Errata (отклонения в работе кристалла). Тем не менее, периферия вполне пригодна для использования. STMicroelectronics рекомендует использовать библиотеку CPAL для работы с этим интерфейсом. Функции библиотеки обходят все ограничения кристалла.
Стоит отметить, что в последних микроконтроллерах STM32F05 (и вероятно STM32F3) Errata на данную периферию практически отсутствует.
Тем не менее, инженеры компании "Промэлектроника" решили поломать свои копья на "квадратной шине". После создания стека управления интерфейсом I2C, его испытали боем, подключив последовательную память EEPROM типа M24 и часы реального времени M41T62.
Результат – стабильная работа "квадратной шины" с, практически, параллельной работой ядра над другими задачами. Это стало возможным благодаря использованию контроллера прямого доступа к памяти и прерываний. Ниже показано, как работает стек обмена данными по интерфейсу I2C.
Исходники стека, а также надстройки для работы с последовательной EEPROM типа M24 выложены на форуме.
Стек написан под семейство STM32F1. Его легко адаптировать под другое семейство. Кроме того, стек использует 7-ми битную адресацию устройств на шине I2C. Исправление одной/двух строк позволит использовать 10-ти битную адресацию.
Пример реализует программное соединение
- STM32F103VBT6
- M24C01-WDW6TP
- M41T62