|
|
  |
Работа с i2c устройствами в Linux, Python |
|
|
|
Nov 19 2015, 14:27
|
Знающий
   
Группа: Свой
Сообщений: 529
Регистрация: 15-06-05
Из: Питер
Пользователь №: 6 032

|
Здравствуйте. Необходимо отладить I2c-шные корки в ПЛИС, т.к. ничего кроме Raspbery PI 2 нет, решил использовать её как мастер, наваял простенький код на Питоне. На этапе отладки тестового софта использую eeprom и SFP модули. Все бы хорошо, но есть проблемы: не читает данные из eeprom(типа AT24C256), точнее читает, но только один и тот же байт данных. При этом из всевозможных SFP модулей данные читаются нормально. В eeprom, если я правильно понимаю, используется страничный доступ, как его задействовать? Если можно на пальцах, т.к. я ни разу не программист. Код #!/usr/bin/python import smbus import time
DevAddr = 0x55
bus = smbus.SMBus(1)
print "I2C: Read from Device 0x%02X" % DevAddr for DevRegAddr in range (255): try: ret = bus.read_byte_data(DevAddr, DevRegAddr) except IOError, err: print "error reading device 0x%02X" % DevAddr exit(-1) print "%X" % ret
--------------------
Россия это даже не страна. Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
|
|
|
|
|
Nov 19 2015, 16:06
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(wolfman @ Nov 19 2015, 16:27)  В eeprom, если я правильно понимаю, используется страничный доступ, как его задействовать? Если можно на пальцах, т.к. я ни разу не программист. Так в документации смотрите. Гуглится по строке поиска "AT24C256". Там смотрите раздел что-то вроде "RANDOM READ". Там на картинке просто все нарисовано (в атмеловской документации это "Figure 5. Random Read"): сначала пишите туда адрес, а потом читаете данные. Страницы- это при записи массивов актуально, не при чтении и не при записи отдельных байтов. Что именно непонятно?
|
|
|
|
|
Nov 19 2015, 16:28
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(wolfman @ Nov 19 2015, 18:09)  Делал так, толку ноль. И мне нужно читать фактически массивом. Если Вы реализовали именно ту картинку, которая в документации, а "толку ноль" -то что-то нужно менять. Кстати, а как Вы определили что "делали так"? давайте картинку с логического анализатора, они обычно автоматом дешифрируют байтики, очень удобно смотреть. Ну или хоть осциллографом возьмите и перерисуйте ручками, там всего-ничего длина посылки. Чудес не бывает- если диаграмма именно та, но не работает, то или микросхема плохая или адрес не тот или все-таки нужно звать программиста.
|
|
|
|
|
Nov 19 2015, 17:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
Цитата(wolfman @ Nov 19 2015, 19:38)  С SFP, нормально читается, там фактически таже eeprom, вот что смущает. не совсем. в SFP-модулях не предусмотрено настраиваемой адресации, как в обычном i2c, т.е. вы не можете повесить на одну i2c шину несколько SFP-модулей. поэтому одного адреса A0, как для SFP, любым другим i2c устройствам недостаточно. смотрите внимательно временные диаграммы для общения с EEPROM.
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
Nov 19 2015, 17:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
ок. смотрим внимательно на даташит для AT24C128/256, на страницу 11.
1) Fisrt word address 2) Second word address вы их посылаете? зы. в SFP их не посылают, ага.
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
Nov 19 2015, 18:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
Цитата(wolfman @ Nov 19 2015, 21:01)  kruxВот такая команда Код bus.write_byte_data(DevAddr, DevRegAddr, value) разве не это делает? Или надо по другому? ХЗ фиг знает, что конкретно функция "bus.write_byte_data" из вашей библиотеки делает. не видя исходного кода - невозможно сказать. по факту - ждём осциллограмм. без них обсуждение в тупике
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|