CH552的SPI的发送FIFO使用问题

CH552的SPI的手册说有一个发送fifoQQ截图20180420004714.jpg


我想用spi发送连续不断的数据流。

这样测试发现只能发送0x12,不能吧0x34发出来(理论上12进了移位寄存器,应该34能写入fifo吧?)

1.JPG

2.JPG

如果等待spi总线空闲,则数据会断流(如发送0x56 0x78)

3.JPG


SPI0_STAT寄存器有一个fifo计数

QQ截图20180420010230.jpg

换汇编仔细测试

先写一个数据到数据寄存器

然后循环读取SPI0_STAT,读取速度保持在个位数的主时钟内,小于spi发送要的16个主时钟,从而保障不丢状态

先读取到内存,读128次,再串口发送

QQ截图20180420010600.jpg

读取结果如下

00 00 00 00 00 00 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18

可见整个过程中,fifo计数器没有任何变化



8个NOP后,再写仍然只发一字节,0x56发不出来

之所以加NOP是怕没写进去,流水线写进去有延时

QQ图片20180420010136.png


逻辑分析仪抓包 ,没有0x56

QQ图片20180420010803.png


所以我想是不是没有发送FIFO,总线写进移位,移完之前锁死

类似74HC165的结构,只有8个D触发器,没有一级锁存?


所以想请问下,我用如何操作才能使用上发送fifo,并且能发送连续不断流的spi数据流?



这个芯片发送SPI数据是有间隔的,但也可以适当降低频率,使数据看上去像连续的。


                           

这个芯片发送SPI数据是有间隔的,但也可以适当降低频率,使数据看上去像连续的。

                       

请问下那么是不是不存在发送FIFO?总线写进移位,移完之前锁死


FIFO是有的,只是无法直接访问,实际直接访问的都是移位寄存器,SPI有个快速收发的模式,读写都启动一次读操作,也就意味着必须缓存2字节,这个地方是要用到FIFO的,但是代码是不能直接访问到这个FIFO的。


我觉得这个FIFO就不是给用户编程快速传输用的,是仅仅给芯片内部SPI快收快发使用的


和你遇到同样的问题,请问您是怎么解决的?


只有登录才能回复,可以选择微信账号登录