你好,我遇到了一些我很难弄清楚的行为。我在全双工模式下使用SPI主机,只使用硬件FIFO(无中断)与外部芯片
通信。我可以通过SPI写得很好。我还可以看到,设备对我的SPI主命令的响应是正确的,因为预期数据是由Oracic分析器看到的。也就是说,来自创建者API的SpimRead ReXDATA不符合预期。这是因为SpimgGeTrxBuffResiZe()返回了不正确的字节数。
如果我通过SPIM发送3字节的数据,我应该接收3字节的数据(即使它是垃圾),因为它是基于移位寄存器的,并且与主时钟同步。我有时会得到一个,但通常是零字节。所以,我很困惑。下面是代码片段。有人对这件事有什么想法吗?
静态BoLoT AFE4300读取(UIT88T地址,U
ti1616T*PDATA)/ **********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************3字节写*由AFE的硬件定义,不能改变。第一字节*始终是要从中读取数据的寄存器。下一个16位*传输是数据。除了数据寄存器之外,所有寄存器都必须在读过之后重新写入。************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ATA将高位字节移出设备SPIMUWRIGETXDATA(0x00);/ /发送哑数据以移出设备TEMP=SPIMUGErrxBuffSersie()的低字节;如果(TEMP>=3){SPIMARRead RXDATA();//忽略地址在HythByth= SPIMARRead ReXDATA()中的地址移位;LuxByth.SPimaRead RxDATA();* pDATa=((UI)NT16It)HythByg & lt;lt;(UTI1616T)低字节;//写入RX数据返回设备,除非它是ADC寄存器(如果是ADCYDATAL ReGEADADR!){地址){//重新写入数据到寄存器SPIMGWORTETXDATA(地址“AdvrsScript写Enabl”);SpimthWruteXDATA(Hyb字节);SpimthWruteXDATA(低字节);}成功=TRUE;} /*注意:如果成功为假,AFE处于未知状态,将需要重置* /返回(成功);} & lt;/PRE& GT;我把一个主时钟数据的PNG附加在从属设备上。主控制器写一个0x21以从从属数据中获得数据,后面跟着两个哑字节。虚拟字节被正确地验证为包含0x81x0xc3和0xc3。PSoC由于某种原因没有接收到这些字节。
谢谢您。
数据恢复
68.8 K