Вот код:
Код
XUartLite_RecvByte(XPAR_UARTLITE_1_BASEADDR);
u8 msg[16];
msg[0] = 0x00;
int sent = 0;
sent = XIic_Send(XPAR_IIC_0_BASEADDR, 0x38, msg, 1, XIIC_REPEATED_START);
for(int i = 0; i < 16; i++) msg[i] = 0;
int received;
received = XIic_Recv(XPAR_IIC_0_BASEADDR, 0x38, msg, 10, XIIC_STOP);
xil_printf("sent=%d\n\r", sent);
xil_printf("received=%d\n\r", received);
xil_printf("received data: ");
for(int i = 0; i < 10; i++) xil_printf("%02X ", msg[i]);
xil_printf(" OK\n\r");
u8 msg[16];
msg[0] = 0x00;
int sent = 0;
sent = XIic_Send(XPAR_IIC_0_BASEADDR, 0x38, msg, 1, XIIC_REPEATED_START);
for(int i = 0; i < 16; i++) msg[i] = 0;
int received;
received = XIic_Recv(XPAR_IIC_0_BASEADDR, 0x38, msg, 10, XIIC_STOP);
xil_printf("sent=%d\n\r", sent);
xil_printf("received=%d\n\r", received);
xil_printf("received data: ");
for(int i = 0; i < 10; i++) xil_printf("%02X ", msg[i]);
xil_printf(" OK\n\r");
Код
sent=1
received=0
received data: 00 00 00 00 00 00 00 00 00 00 OK
received=0
received data: 00 00 00 00 00 00 00 00 00 00 OK
Вот с точки зрения даташита я должен отправить адрес регистра который хочу читать, а затем уже принять байт начиная с него:
Нажмите для просмотра прикрепленного файла
На деле же получается вот что, запись заканчивается новым стартом (XIIC_REPEATED_START)
Нажмите для просмотра прикрепленного файла
Тут линии такие:
Project.unit<0>.dataChannel<0>=mb/fpga_0_Generic_IIC_Bus_Sda_pin_T
Project.unit<0>.dataChannel<1>=mb/fpga_0_Generic_IIC_Bus_Sda_pin_O
Project.unit<0>.dataChannel<2>=mb/fpga_0_Generic_IIC_Bus_Scl_pin_T
Project.unit<0>.dataChannel<3>=mb/fpga_0_Generic_IIC_Bus_Scl_pin_O
Ну а как без XIIC_REPEATED_START? Тогда если XIIC_STOP то стоп и возникнет. ACK я видеть к сожалению не могу, _Sda_pin_O у меня увы выдает все время ноль, но зато на _Scl_pin_T должны быть правильные клоки достоверно быть видны.
Неужели возможно самый распространенный сценарий они не поддерживают? Когда пишется один байт с адресом а затем адрес регистра 8 бит и сразу чтение?
Вопрос: как осуществить нормальную запись одного байта и затем сразу чтение??? Я бьюсь уже очень много дней. Но работу с теми же датчиками по I2C на ARM процессоре с Linux я осилил ща 30 минут и всё сразу работало, а тут какой-то затык.