类似的问题公众号文章已经有分享

https://mp.weixin.qq.com/s/qESc7h-y0GQr9Dh_kH67PA?token=1312261758&lang=zh_CN 分享一个SPI查询方式收发数据的问题


spi_master_readflash_X1这个函数
如下接收处理的位置处理逻辑有BUG,硬件设置一笔接收可能大于FIFO大小,导致软件有可能来不及读出数据

174643h83i33ozt8pdeczy

且SPI速度越快越容易出问题(看代码中的注释有在调整SPI的时钟分频,我估计当时写这个代码的同学也可能发现了速度快了有问题,但是不知道为什么,所以就在那里调速率),

174643qycddsztmtddgsyk

类似如下左边是读到错误数据,右边是正确的数据,看到数据有错位和丢失。

174643lbscambcqzyatzuy

SPI部分的接口也写的不是很好,太零散混乱,干脆就重新写了个spi的查询收发接口,对于spi查询收发操作只需要一个接口就可以了,可以支持不同总线宽度,可以只发,只收,或者同时收发,没必要搞这么多接口太乱。

174643e92tvcv2xa29acai

174643gkigzrrxf5lbpgpb

最低2分频,最大96MHz,修改之后跑96M都没问题,如下实测

7个周期70ns,一个周期10ns,100MHz

174644dg9ovb54itiszvp9

Shell中增加了flash测试的命令

174645rez03o0lz9x9bc4c

174645bkiae87x2kx78ddd

不再赘述,详见代码

https://gitee.com/qinyunti/fr3068-e-c-micropython.git