Настройка расширения EEPROM i2c-2 BeagleBoneBlack Rev-C - PullRequest
0 голосов
/ 27 октября 2018

BeagleBoneBlack поставляется с «внутренней» EEPROM, подключенной к линии i2c-0. Я ясно вижу это, когда делаю i2cdetect:

debian@beaglebone:~$ i2cdetect -y -r 0
 0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: UU -- -- -- -- -- -- -- 

Показывается под адресом 0x50. Когда я пытаюсь сделать ahexdump, я получаю следующие значения без проблем:

sudo hexdump -C /sys/class/i2c-dev/i2c-0/device/0-0050/eeprom | head -5
00000000  aa 55 33 ee 41 33 33 35  42 4e 4c 54 30 30 30 43  |.U3.A335BNLT000C|
00000010  31 38 33 37 42 42 42 47  30 36 32 32 ff ff ff ff  |1837BBBG0622....|
00000020  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00001000  aa 55 33 ee 41 33 33 35  42 4e 4c 54 30 30 30 43  |.U3.A335BNLT000C|

Теперь я хочу добавить еще одну EEPROM (с накидкой) на линию i2c-2, которая поддерживается в соответствии с BBB SRM , раздел 8.2. Это CAT24C256, как упомянуто в SRM. Допустимый диапазон адресов для карт расширения: 0x54-0x57. Когда я делаю i2cdetect, я вижу следующее:

debian@beaglebone:~$ i2cdetect -r -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --   

Я вижу адреса 0x54-0x57, но когда я пытаюсь выполнить шестнадцатеричный дамп, я получаю сообщение об ошибке:

  hexdump: /sys/class/i2c-dev/i2c-2/device/2-0054/eeprom: Connection timed out

Вопросы:

  1. Почему они отображаются как U не фактические номера адресов? Я знаю, что U обозначает использованный ресурс?
  2. Почему я не могу прочитать с этой EEPROM? Я попытался все адреса от 0x54-0x57 без удачи. Я могу подтвердить, что эти адреса отображаются в / sys / class / i2c-dev / i2c-2 / device и в каждом каталоге есть следующее:

     debian@beaglebone:~$ ls /sys/class/i2c-dev/i2c-2/device/2-0054/ -la
     total 0
     drwxr-xr-x 4 root root     0 Oct 26 19:46 .
     drwxr-xr-x 8 root root     0 Oct 26 19:46 ..
     drwxr-xr-x 3 root root     0 Oct 26 19:47 2-00540
     lrwxrwxrwx 1 root root     0 Oct 26 19:47 driver -> ../../../../../../bus/i2c/drivers/at24
     -rw------- 1 root root 32768 Oct 26 19:47 eeprom
     -r--r--r-- 1 root root  4096 Oct 26 19:47 modalias
     -r--r--r-- 1 root root  4096 Oct 26 19:47 name
     lrwxrwxrwx 1 root root     0 Oct 26 19:47 of_node -> ../../../../../../firmware/devicetree/base/ocp/i2c@4819c000/cape_eeprom0@54
     drwxr-xr-x 2 root root     0 Oct 26 19:47 power
     lrwxrwxrwx 1 root root     0 Oct 26 19:47 subsystem -> ../../../../../../bus/i2c
     -rw-r--r-- 1 root root  4096 Oct 26 19:47 uevent 
    

Я вижу, как адреса отображаются в ядре, но когда я пытаюсь hexdump eeprom, он вообще не работает. Я думал, что это должно быть настроено ядром, так как оно упоминается в BeagleBone SRM. Мне нужно наложение, чтобы добавить в Uboot для этого?

Все, что я пытаюсь сделать, это прочитать из EEPROM, как я сделал с "внутренним", чтобы убедиться, что он работает. Что я делаю не так?

1 Ответ

0 голосов
/ 14 ноября 2018

Проблема заключалась в том, что диспетчер накидок «включал» эти адреса на i23c-2. Нам нужно отключить менеджер мыса, чтобы освободить эти адреса. После этого он показывает 0x57 под i2c-2, поэтому он должен работать потом.

Пожалуйста, ознакомьтесь со следующей ссылкой, чтобы узнать, как отключить Cape Manager в BeagleBone:

https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/beagleboard/NG8cDWuv2Y0/69vk5F5ZAgAJ)

Обязательно отредактируйте файл am335x-boneblack-uboot.dts, удалите строку включения в строке 11 и замените следующим:

 #include "am335x-bone-common-no-capemgr.dtsi"

Обратите внимание, что это отключит вашу линию i2c-2 по умолчанию, поэтому либо включите ее через оверлеи, либо отредактируйте am335x-bone-common-no-capemgr.dtsi и добавьте после & i2c0 (около строки 245):

&i2c2 {
    pinctrl-names = "default";
    pinctrl-0 = <&i2c2_pins>;

    status = "okay";
    clock-frequency = <100000>;
};
...