Команда i2cdetect
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Показать доступные адаптеры i2cdetect -l i2c-0 i2c 2180000.i2c I2C adapter i2c-1 i2c 21b0000.i2c I2C adapter Вывод команды i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- 18 19 -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: 30 -- -- -- -- 35 -- -- 38 -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- UU UU -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- --: Указывает, что по этому адресу на I2C-шине не было обнаружено устройства. UU: Указывает, что устройство по этому адресу используется ядром (или драйвером) и недоступно для работы через i2c-tools число (например, 18, 19, 30): Указывает на обнаруженное устройство по этому адресу. Здесь показаны устройства, обнаруженные на шине 0 I2C. Они находятся по следующим адресам: 0x18 0x19 0x30 0x35 0x38 0x51 Адреса 0x54 и 0x55 помечены как UU, что означает, что эти устройства уже используются ядром, скорее всего драйвером. Проверьте загруженные модули ядра: Используйте команду lsmod, чтобы увидеть, какие модули ядра загружены, и попробуйте найти тот, который использует адреса 0x54 и 0x55. Выключите соответствующие модули: Если возможно, выгрузите модули ядра, которые используют эти устройства. Например: rmmod имя_модуля Вернуть модуль ядра: modprobe имя_модуля |
Команда i2cset
1 2 3 4 5 6 7 8 |
Команда i2cset используется для записи данных в регистр устройства на I2C-шине. i2cset -y 0 0x54 0x00 0x12 0x34 0x56 0x78 0x9a i -y: Отключает интерактивный запрос подтверждения (позволяет выполнять команду без подтверждения). 0: Номер I2C-шины (обычно 0 или 1). 0x54: Адрес I2C-устройства. 0x00: Адрес регистра, в который будут записаны данные. 0x12 0x34 0x56 0x78 0x9a: Данные, которые будут записаны в регистр. i: Указывает, что данные должны быть записаны как последовательность байтов (I2C block write). |
Команда i2cget
1 2 3 4 5 6 7 8 9 |
Команда i2cget используется для чтения данных из регистра устройства на I2C-шине. i2cget -y 0 0x54 0x00 i 5 -y: Отключает интерактивный запрос подтверждения. 0: Номер I2C-шины. 0x54: Адрес I2C-устройства. 0x00: Адрес регистра, из которого будут прочитаны данные. i: Указывает, что чтение будет выполнено как последовательность байтов (I2C block read). 5: Количество байтов для чтения. |
Стирание данных
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
i2cset -y 0 0x54 0x00 0x00 0x00 0x00 0x00 0x00 i i2cset -y 0 0x54 0x05 0x00 0x00 0x00 0x00 0x00 i Стирание большого объёма данных баш скрипт ------------------------------- #!/bin/bash DEVICE_ADDRESS=0x54 START_REGISTER=0x00 BLOCK_SIZE=16 # размер блока данных для стирания за раз # Цикл для записи нулей по всем регистрам for ((i=0; i<256; i+=BLOCK_SIZE)); do i2cset -y 0 $DEVICE_ADDRESS $((START_REGISTER + i)) $(printf '0x00%.0s' $(seq 1 $BLOCK_SIZE)) i done ------------------------------- |
Частный случай записи в eprom
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# выгрузили модуль ядра rmmod at24 #конвертация ASCII-кодов echo -n "bs04" | od -An -t x1 # ASCII-кодов printf "\x62\x73\x30\x34" | echo -e $(cat -) # пример записи в bs04 #i2cset -y 0 0x54 0x00 0x62 0x73 0x30 0x34 i #через звездочку удалять не стоит может будущем аукнутся rm /var/lib/nexuscli/access_token rm /var/lib/nexuscli/device_id rm /var/lib/nexuscli/refresh_token #вот так можно прочитать i2cget -y 0 0x54 0x00 i 6 #загрузили модуль ядра modprobe at24 |