Последовательная передача с использованием I2C на Raspberry Pi, python smbus

Я хочу передать AVR или Arduino и т. д. по I2C от Raspberry pi. Я пишу на Питоне.

Я уже успешно установил связь, используя функцию write_data() в модуле smbus. Но я хочу последовательно передавать несколько байтов данных.

Скажите, пожалуйста, как передать несколько байтов данных в связи i2c. Я нахожу функцию write_block_data(), но не понимаю второй параметр CMD. Что такое ЦМД?? Должен ли я указать значение CMD?

благодарю вас.


person hiroyky    schedule 06.08.2014    source источник


Ответы (1)


Связь между RPi и Arduino по I2C — это большой беспорядок, если вы используете библиотеку Wire.h. Короткий ответ заключается в том, что RPi использует повторяющийся стартовый сигнал, а Arduino его не использует.

Повторяющийся стартовый сигнал на интерфейсе I2C указывает подчиненному устройству начать отвечать на вызов. В случае, если Arduino запрашивает и отвечает двумя отдельными вызовами. Поэтому вы не можете отправить блок

Я сделал две записи в блоге, чтобы связать две архитектуры через I2C. Первый — для использования ШИМ удаленного контроллера: http://distantorion.com/2014/10/24/rc-signals-pwm-to-i2c-with-arduino/ Второй — для управления ЖК-дисплеем 128x64 на I2C: http://distantorion.com/2014/11/01/i2c-display-with-arduino/

Во втором я использую данные блока в python:

bus.write_i2c_block_data(0x05,0x10,buff)

0x05 — адрес устройства, 0x10 — «команда», buff содержит символы для отображения.

По поводу команд. В I2C ведомое устройство работает в виде команд или регистров. Оба метода выглядят одинаково. Если вы используете повторяющийся сигнал запуска, связь, кажется, считывает и записывает регистры. Когда у вас нет повторяющегося стартового сигнала, общение выглядит как система «команда-ответ». В моем примере я отправляю 0x10, что означает «поместить символы из на дисплей». А 0x01 — это команда очистки экрана, а 0x02 включает подсветку.

person KZD76    schedule 27.01.2015