Команда i2cdetect
Показать доступные адаптеры
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
Команда 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
Команда i2cget используется для чтения данных из регистра устройства на I2C-шине. i2cget -y 0 0x54 0x00 i 5 -y: Отключает интерактивный запрос подтверждения. 0: Номер I2C-шины. 0x54: Адрес I2C-устройства. 0x00: Адрес регистра, из которого будут прочитаны данные. i: Указывает, что чтение будет выполнено как последовательность байтов (I2C block read). 5: Количество байтов для чтения.
Стирание данных
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
# выгрузили модуль ядра rmmod at24 #конвертация ASCII-кодов echo -n "bs04" | od -An -t x1 # ASCII-кодов printf "x62x73x30x34" | 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