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

 
 
> MicroBlaze I2C - XIic, отправка-прием, отправить и сразу принять
AVR
сообщение Oct 22 2012, 01:04
Сообщение #1


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Не понимаю что я делаю не так. Не могу найти фукнцию, которая бы записала один байт (адрес регистра внутри slave) и затем стала бы читать N байт.

Вот код:
Код
    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");

Код
sent=1
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 минут и всё сразу работало, а тут какой-то затык.


--------------------
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:16
Рейтинг@Mail.ru


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