2015-06-12 4 views
1

Я работаю с I2C-устройством под Linux и попытался использовать интерфейс устройства, как описано в разделе Link.Linux I2C-Dev IOCTL-Call производит неправильное сообщение

Таким образом, если мы предполагаем следующий код:

char outbuf[SIZE] = { 'e', 'b' }; 

struct i2c_rdwr_ioctl_data msgset; 
struct i2c_msg msg[1]; 

msg[0].addr = 0x53;  // access address 0x53 
msg[0].flags = 0;  // 0 means write 
msg[0].len = SIZE;  // size is already set to two 
msg[0].buf = outbuf 

msgset.msgs = msg; 
msgset.nmsgs = 1; 

ioctl(file, I2C_RDWR, &msgset); // fille is already assigned, etc. 

мы бы написать одно сообщение, содержащее два байта для решения 0x53 !? Или мы могли бы сказать,

S Addr Wr [A] Data [A] Data [A] P

в пути, как его сделали here.

Но когда я смотрю на свою сферу, я получаю что-то вроде этого: message complete

или Лил более подробную:

enter image description hereenter image description here

Но это не то, что мы хотим, а не то, что в спецификации указано, , кроме того, мы получаем

S Addr Wr [A] Data P S Addr Wr [A] Data P

Кто-нибудь знает это поведение или может описать его мне? Я пробовал все типы вызовов IOCTL, SMBUS, write_block_data. Каждый раз, когда появляется новое начальное условие между байтами данных и адрес также повторяется!

Я получаю что-то неправильно?

Спасибо за ваше время и наилучшие пожелания!

Befedo

ответ

0

Я нашел перекос ...

мое оборудование было создано так:

Notebook -> DP/VGA -> I2C-Slave 

Я использовал ноутбук, который только получил выход DisplayPort, преобразованный это через DP-to-VGA и использовал интерфейс I2C, в котором было подключено простое ведомое устройство.

И похоже, что адаптер DP-to-VGA может работать только с Bytewide-Access для I2C-Bus, поэтому я настроил «новый» ноутбук с интегрированным VGA-интерфейсом и использовал его напрямую. .

enter image description here

которые приводят к совершенно выровненной передачи, как и ожидалось.

 Смежные вопросы

  • Нет связанных вопросов^_^