关于CH347F中SPI_Read()函数

为什么SPI_Read()调用后,第一次SPI通讯时钟数不对,主机发送的数据也不对,第二次才正常,16个clk位,数据也正确。

函数调用参数赋值如下:

 ulong length=2;

  CH347SPI_Read(0,0x80,2,ref length,Read_buff)

1727407390309639.jpg

1727407390104278.jpg


就是我做了一个WPF的窗口,想通过此方法去和我的芯片进行SPI通信。输入adress后转为byte类型赋给read_buffer,点击read按钮进入对应的block,SPI初始化后,进行read操作。但是read按钮第一下点击,clk数量不对,点击第二下,才正常

image.png


您好,可将API修改为CH347SPI_Read(0,0x80,0,ref length,Read_buff)来完成只读操作,该API调用时,若oLength设置长度,则会先进行写操作,再进行后续的读操作,设置为0则为只读应用。


OK啦,OK啦。

现在是正确的,我之前把SPI_SetDataBits()写在SPI_Init后面了,然后SPI_READ估计错乱了,正确的时序是先调用Init方法,紧跟着就SPI_read()

image.png



SPI_read()函数,指定一个buffer[]数组,波形都没问题,就是读取结果为FF,然后用SPI_WriteRead()函数,更奇怪了,buffer[0]是后发送的,buffer[1]先发送,然后返回值是先读取的赋给buffer[1]

这些都是什么逻辑?

另外,我buff这么声明OK的吧

image.png

image.png

发送两个字节,读取两个字节。16个clk,读取的两个字节是前八个和后八个clk对应的MISO信号是吧?问题到底在哪



以及,你所说的写和读,是针对从机的吗?读取从机对应地址中的数值,还是说读取MISO的返回值?官方手册的内容太潦草了。本来很简单的调用函数,赋值,手册上只提供了形参,连调用都懒得写。导致使用者一头雾水


可以啦可以啦。CH347SPI_SetDataBits赋值0x00,设为8bit一次。然后在初始化中把所有间隔设为0


好的,有问题随时与我们沟通。如遇问题,结合硬件SPI排查会更快些。

相关SPI编程参考:https://blog.csdn.net/WCH_TechGroup/article/details/132173785 


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