GD32F103模拟3线SPI通信问题
本帖最后由 zyftank 于 2024-11-23 17:44 编辑最近用GD32F103CBT6读一个3线SPI接口的ADC——芯海的CS1239,因为把连接画错了,只能用IO模拟SPI进行通信,但是在读取ADC芯片寄存器值的时候,一直返回0x00,我用万用表量了一下ADC的CS和SCK的PIN脚,都是高电平,SDA一直是低电平,不知道是什么原因,求大佬位帮忙看一下程序。
要想用万用表测,那得把每一步的延时加到特别大(比如1秒)才行.
建议准备一个示波器.
cs1239_read_reg就有问题,在读数据前怎么有个SDA_OUTPUT,不应是SDA_INPUT吗?
LcwSwust 发表于 2024-11-21 10:41
要想用万用表测,那得把每一步的延时加到特别大(比如1秒)才行.
建议准备一个示波器.
cs1239_read_reg就有问 ...
cs1239_read_reg读寄存器值的时候,要先发读指令和地址,所以先是SDA_OUTPUT,发送指令后再改成SDA_INPUT。 zyftank 发表于 2024-11-21 10:48
cs1239_read_reg读寄存器值的时候,要先发读指令和地址,所以先是SDA_OUTPUT,发送指令后再改成SDA_INPUT ...
哦,是我没看仔细.
最好是用示波器看看波形,
如果没示波器,就用利用单片机的ADC造一个示波器. 学习一下 GPIO引脚连接是否正确 参考GD32F103CBT6和CS1239的数据手册 检查硬件连接是否有任何短路或断路情况。 使用示波器来观察CS、SCK和SDA的波形是否符合SPI通信的规范。 我将SDA设置成OUT_PP,然后将SDA拉高,用万用表测量只有0.9V,这是芯片坏了? 搞了半天,最后是ADC芯片坏了。 其实估计是你的模拟SPI没配置好导致的,要不就是芯片坏了
我觉得你可以断开ADC,直接接逻辑分析仪试试,看看时序是啥样的
看看你的外围电路呢?是不是设计的不对劲啊?
软件模拟SPI时序问题,通过IO口模拟SPI通信需要精确控制时序。如果软件中的SPI时序模拟不正确,可能会导致数据读取错误。请仔细检查您的SPI通信协议实现,确保所有时序和延迟都正确模拟。
确保正确初始化了ADC芯片CS1239,并且所有必要的寄存器配置都已正确写入。如果初始化或配置不正确,可能会导致读取失败。
ADC芯片CS1239的问题,虽然使用万用表测量CS和SCK引脚为高电平,SDA引脚为低电平,但这并不能完全排除芯片本身的问题。可以尝试重新检查连接,确保所有连接都正确无误,并且没有短路或断路的情况。
电源问题,确保ADC芯片CS1239的电源供应正常。如果电源不稳定或不足,可能会导致芯片工作不正常。
软件读取逻辑错误,检查软件的读取逻辑是否正确。有时候软件中的错误逻辑可能导致读取失败。
检查并优化软件模拟SPI的代码,确保时序和协议正确。最好用逻辑分析仪试试
页:
[1]
2