问题描述:
使用多个IOLINK设备测试后发现当启动了Cycle Timer后,从IOLINK设备读取到错误的数据,该故障随机发生,通常几分钟出现一次。我们的配置如下:
0x03 | Interrupt Enable: 0xff
0x06 | Ch A CQ Control: 0x82
0x07 | Ch B CQ Control: 0x82
0x0A | Ch A Msg Control: 0x3e
0x0B | Ch B Msg Control: 0x3e
0x12 | Ch A Cycle Timer: 0x28
0x13 | Ch B Cycle Timer: 0x28
主控制器每1秒读取MAX14819一次,MAX14819每4ms读取IOLINK设备一次,主机读取的过程如下:
-读取Interrupt register (0x02)并判断RxDataRdy_ 位状态
-如果RxDataRdy_ 设置为1,从 RxFIFOLvl_(0x04/0x05)寄存器读取FIFO 内部数据的长度
-如果FIFO内部的数据字节数是预期值,从 TxRxData_ (0x00,0x01)读取相应数量的字节。
============================================================
============================================================
当MAX14819从传感器/IOLINK设备读取到数据后主机要尽快将FIFO中的数据读取,如果在主机读取的过程中MAX14819有新的数据接收到就会发送读取错误的数据,基于这样的原因,建议更改主机按照下面的步骤来读取FIFO数据:
1.读取interrupt register (0x02),先忽略掉RxDataRdy
2.读取interrupt register (0x02)
3.如果RxDataRdy为低,重复第二步
4.当RxDataRdy为高,读取RxFifoLvl (0x04/0x05),并且重复第4步直到RxFifoLvl 达到预期值
5.从0x00/0x01寄存器读取数据。