ch432t的linux驱动,无论设怎样的spi频率,ch43x_spi_test测试无法通过

使用官方提供的ch432t linux驱动(ch432ser_linux/ch432.c at main · WCHSoftGroup/ch432ser_linux · GitHub),ch43x_spi_test测试无法通过。无论我们怎么设置spi的频率,都不行。


但是,当我们在ch43x_spi_test接口中增加9秒的读写寄存器操作后,5MHz(含)以下的频率,能够正常通信,应用层上的串口也正常。此时如果把spi频率大于5MHz时,ch43x_spi_test将失败;

  

tatic int ch43x_spi_test(struct uart_port *port)

{

.....


// 增加start。。。。

u8 cnt=3'

while(cnt--)

{

ch43x_port_write(port, CH43X_SPR_REG, 0x55);

mdelay(1500);

ch43x_port_read(port, CH43X_SPR_REG);

mdelay(1500);

}


// 增加end。。。。



ch43x_port_write(port, CH43X_SPR_REG, 0x55);

val = ch43x_port_read(port, CH43X_SPR_REG);

if (val != 0x55) {

dev_err(&s->spi_dev->dev, "UART %d SPR Test Failed.\n", port->line);

return -1;

}

....

}




ch34x_spi_test函数用于测试SPI通信,如果未通过说明硬件线路存在问题或芯片未处于正常工作状态,可发原理图我们看下。



无标题.png


你好,由于我们发现在我们的linux内核中,spi_write_then_read接口会产生两个cs信号,所以我们使用了一个gpio管脚,直接连接到ch432t的cs管脚,并在调用ch43x_port_read,ch43x_port_write等接口的发送数据前后,增加cs管脚的拉低或者拉高,实现一次的cs片选。后来我们参考linux kernel spi write_and_read clk不间断_linux spi read执行完后cs就会拉高吗-CSDN博客 这个博客所说的进行修改,确实有效,但在串口通信下,上位机给串口发送的数据接收不到,而串口发送过来的数据可以接收,目前我们仍保持使用gpio管脚直接连接到ch432t芯片的cs片选脚,上面是我们的电路图,除了cs那个改为gpio直接连接外,cpu端输出的sdi和sdo已改为交叉连接,ch432t端保持不变。


目前的状况有:

1. 如果保持ch43x_spi_test中增加的测试代码,能够正常进行串口通信,但上位机发送数据快的情况下,驱动的接收一直出不来,发送慢时就正常;


2. 如果取消ch43x_spi_test中增加的测试代码,ch43x_spi_test就测试不通过,linux系统创建的驱动无法进行通信


麻烦官方看一下,这个电路是否存在问题?




另外,如何判断芯片的工作正常还是不正常的?


1、如果硬件上正常,则任何时候调用ch43x_spi_test都一定能通过,不会存在加延时和不加延时有差异的问题,该现象需要抓SPI时序看下,对比有无delay的区别;

2、根据上面的描述,怀疑是对CS的控制存在问题,未能满足芯片时序要求,同样需要先检查SPI时序,可输出时序和驱动日志发至邮箱yz@wch.cn

3、电路设计没问题


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