реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Работа с i2c устройствами в Linux, Python
wolfman
сообщение Nov 19 2015, 14:27
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 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


--------------------
Россия это даже не страна.
Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 19 2015, 16:06
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(wolfman @ Nov 19 2015, 16:27) *
В eeprom, если я правильно понимаю, используется страничный доступ, как его задействовать?
Если можно на пальцах, т.к. я ни разу не программист.

Так в документации смотрите. Гуглится по строке поиска "AT24C256". Там смотрите раздел что-то вроде "RANDOM READ".
Там на картинке просто все нарисовано (в атмеловской документации это "Figure 5. Random Read"): сначала пишите туда адрес, а потом читаете данные.
Страницы- это при записи массивов актуально, не при чтении и не при записи отдельных байтов.
Что именно непонятно?
Go to the top of the page
 
+Quote Post
wolfman
сообщение Nov 19 2015, 16:09
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 529
Регистрация: 15-06-05
Из: Питер
Пользователь №: 6 032



Делал так, толку ноль. И мне нужно читать фактически массивом.


--------------------
Россия это даже не страна.
Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 19 2015, 16:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(wolfman @ Nov 19 2015, 18:09) *
Делал так, толку ноль. И мне нужно читать фактически массивом.

Если Вы реализовали именно ту картинку, которая в документации, а "толку ноль" -то что-то нужно менять.
Кстати, а как Вы определили что "делали так"? давайте картинку с логического анализатора, они обычно автоматом дешифрируют байтики, очень удобно смотреть. Ну или хоть осциллографом возьмите и перерисуйте ручками, там всего-ничего длина посылки.
Чудес не бывает- если диаграмма именно та, но не работает, то или микросхема плохая или адрес не тот или все-таки нужно звать программиста.
Go to the top of the page
 
+Quote Post
wolfman
сообщение Nov 19 2015, 16:38
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 529
Регистрация: 15-06-05
Из: Питер
Пользователь №: 6 032



С программистами сложнее, посему и ваяю сам. Диаграмки завтра. И когда писал, подумал, что может действительно не так писал(домой приезду, проверю). С SFP, нормально читается, там фактически таже eeprom, вот что смущает.


--------------------
Россия это даже не страна.
Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
Go to the top of the page
 
+Quote Post
krux
сообщение Nov 19 2015, 17:16
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата(wolfman @ Nov 19 2015, 19:38) *
С SFP, нормально читается, там фактически таже eeprom, вот что смущает.

не совсем.
в SFP-модулях не предусмотрено настраиваемой адресации, как в обычном i2c, т.е. вы не можете повесить на одну i2c шину несколько SFP-модулей.
поэтому одного адреса A0, как для SFP, любым другим i2c устройствам недостаточно.
смотрите внимательно временные диаграммы для общения с EEPROM.



--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
wolfman
сообщение Nov 19 2015, 17:40
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 529
Регистрация: 15-06-05
Из: Питер
Пользователь №: 6 032




Ну почему же, в случае конкретной eeprom, я корочу ножки адреса на "землю" и получаю адрес 0x50(A0).
С другими устройствами будет по другому, тут согласен. Как раз разбираюсь с такой i2c коркой, которая позволяет выходить на Авалон с разной шириной данных.


--------------------
Россия это даже не страна.
Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
Go to the top of the page
 
+Quote Post
krux
сообщение Nov 19 2015, 17:48
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



ок.
смотрим внимательно на даташит для AT24C128/256, на страницу 11.
Прикрепленное изображение


1) Fisrt word address
2) Second word address
вы их посылаете?

зы. в SFP их не посылают, ага.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
wolfman
сообщение Nov 19 2015, 18:01
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 529
Регистрация: 15-06-05
Из: Питер
Пользователь №: 6 032



krux
Хорошо.

Хм, возможно понял почему не работает, завтра проверю.


--------------------
Россия это даже не страна.
Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
Go to the top of the page
 
+Quote Post
krux
сообщение Nov 19 2015, 18:13
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 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" из вашей библиотеки делает.
не видя исходного кода - невозможно сказать.

по факту - ждём осциллограмм.
без них обсуждение в тупике


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
wolfman
сообщение Nov 20 2015, 06:49
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 529
Регистрация: 15-06-05
Из: Питер
Пользователь №: 6 032



Спасибо всем откликнувшимся, я действительно не правильно формировал запросы к eeprom,
точнее не правильно использовал функции чтения/записи.


--------------------
Россия это даже не страна.
Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016