zyftank 发表于 2024-11-21 10:25

GD32F103模拟3线SPI通信问题

本帖最后由 zyftank 于 2024-11-23 17:44 编辑

最近用GD32F103CBT6读一个3线SPI接口的ADC——芯海的CS1239,因为把连接画错了,只能用IO模拟SPI进行通信,但是在读取ADC芯片寄存器值的时候,一直返回0x00,我用万用表量了一下ADC的CS和SCK的PIN脚,都是高电平,SDA一直是低电平,不知道是什么原因,求大佬位帮忙看一下程序。

LcwSwust 发表于 2024-11-21 10:41

要想用万用表测,那得把每一步的延时加到特别大(比如1秒)才行.
建议准备一个示波器.
cs1239_read_reg就有问题,在读数据前怎么有个SDA_OUTPUT,不应是SDA_INPUT吗?

zyftank 发表于 2024-11-21 10:48

LcwSwust 发表于 2024-11-21 10:41
要想用万用表测,那得把每一步的延时加到特别大(比如1秒)才行.
建议准备一个示波器.
cs1239_read_reg就有问 ...

cs1239_read_reg读寄存器值的时候,要先发读指令和地址,所以先是SDA_OUTPUT,发送指令后再改成SDA_INPUT。

LcwSwust 发表于 2024-11-21 10:58

zyftank 发表于 2024-11-21 10:48
cs1239_read_reg读寄存器值的时候,要先发读指令和地址,所以先是SDA_OUTPUT,发送指令后再改成SDA_INPUT ...

哦,是我没看仔细.
最好是用示波器看看波形,
如果没示波器,就用利用单片机的ADC造一个示波器.

xionghaoyun 发表于 2024-11-21 11:38

学习一下

两只袜子 发表于 2024-11-21 15:21

GPIO引脚连接是否正确

elephant00 发表于 2024-11-21 15:23

参考GD32F103CBT6和CS1239的数据手册

jcky001 发表于 2024-11-21 16:00

检查硬件连接是否有任何短路或断路情况。

cr315 发表于 2024-11-21 17:00

使用示波器来观察CS、SCK和SDA的波形是否符合SPI通信的规范。

zyftank 发表于 2024-11-22 07:31

我将SDA设置成OUT_PP,然后将SDA拉高,用万用表测量只有0.9V,这是芯片坏了?

zyftank 发表于 2024-11-23 17:44

搞了半天,最后是ADC芯片坏了。

p0gon9y 发表于 2024-12-17 21:52

其实估计是你的模拟SPI没配置好导致的,要不就是芯片坏了

kaif2n9j 发表于 2024-12-18 20:11

我觉得你可以断开ADC,直接接逻辑分析仪试试,看看时序是啥样的

l1uyn9b 发表于 2024-12-18 21:46

看看你的外围电路呢?是不是设计的不对劲啊?

g0d5xs 发表于 2024-12-19 19:18

软件模拟SPI时序问题,通过IO口模拟SPI通信需要精确控制时序。如果软件中的SPI时序模拟不正确,可能会导致数据读取错误。请仔细检查您的SPI通信协议实现,确保所有时序和延迟都正确模拟。

lamanius 发表于 2024-12-19 23:49

确保正确初始化了ADC芯片CS1239,并且所有必要的寄存器配置都已正确写入。如果初始化或配置不正确,可能会导致读取失败。

zhizia4f 发表于 2024-12-20 07:22

ADC芯片CS1239的问题,虽然使用万用表测量CS和SCK引脚为高电平,SDA引脚为低电平,但这并不能完全排除芯片本身的问题。可以尝试重新检查连接,确保所有连接都正确无误,并且没有短路或断路的情况。

y1n9an 发表于 2024-12-20 09:36

电源问题,确保ADC芯片CS1239的电源供应正常。如果电源不稳定或不足,可能会导致芯片工作不正常。

su1yirg 发表于 2024-12-20 16:11

软件读取逻辑错误,检查软件的读取逻辑是否正确。有时候软件中的错误逻辑可能导致读取失败。

q1ngt12 发表于 2024-12-20 18:20

检查并优化软件模拟SPI的代码,确保时序和协议正确。最好用逻辑分析仪试试

页: [1] 2
查看完整版本: GD32F103模拟3线SPI通信问题