我正在尝试将 ads8688与 BeagleBoard 配合使用。 该器件会响应寄存器的设置/读取、但开始转换是一个不可执行的操作。 AVDD 为5V、DVDD 为3.3V。
这是我编写的 python 脚本:
#!/usr/bin/python 来自 Adafruit_BBIO.SPI 导入 SPI def ad_wreg (reg、d): R = SPI.xfer2 ([reg*2+1、d、0]) 如果 r[2]!= d: 引发异常('error writing reg') def ad_rreg (reg): R = spi.xfer2 ([reg*2、0、0]) 返回 r[2] def ad_cmd (cmd): R = spi.xfer2 ([cmd、0、0、0]); 返回 r[2:] #- main ----= SPI ad_cmd (cmd)(cmd)范围 内的复位#0x85 (SPI = 1、SPI.r.0、SPI.c (r1、SPI.c)。 #转储寄存 器如果 i =4:继续#无寄存器4 打印十六进制(i)、十六进制(ad_rreg (i)) ad_cmd (0xa0)# auto_rst 打印'tarting auto" 打印'cmd'、hex (ad_rreg (0x3f))#命令回读 范围(8): 打印 i、spi、auto_0、swap0 (0、swap0、swap0)(0、swap0)
代码生成以下输出:
0x1 0xff
0x2 0x0
0x3 0x3
0x5 0x0
0x6 0x0
0x7 0x0
0x8 0x0
0x9 0x0
0xA 0x0
0xb 0x0
0xC 0x0
正在自动启动
CMD 0x0
0 [0、0、255、255、255、255、 128]
1 [0、0、255、255、255、255、 128]
2 [0、0、255、255、255、255、 128]
3 [0、0、255、255、255、255、 128]
4 [0、0、255、255、255、255、 128]
5 [0、0、255、255、255、255、 128]
6 [0、0、255、255、255、255、 128]
7 [0、0、255、255、255、255、 128]
我已经使用示波器验证了 SPI 信号。 一切看起来都很好。 此外、为了排除 SPI 干扰、我已将寄存器1 (AUTO_SEQ_EN)设置为每一个可能的8位值、并将其读回以进行验证。 例如:
对于 I IN 范围(0x100):
ad_wreg (1、I)
如果 i!= ad_rreg (1):
提出异常('err')
我已经这么做了数千次、没有错误。
因此、寄存器写入/读取正常、但是如果使用0xa0或0xcx (例如0xcc)启动转换、则始终会产生上述输出。 回读命令始终返回0。 因此、乍一看、芯片将不会开始转换。 然而、检查额外的特性数据(在16位结果之后)似乎表明更多的事情是错误的。 通道地址应在自动模式下更改、但不会更改。 但没关系、这可以通过芯片不进入自动模式来解释。 器件地址位应该是 B00、因为功能寄存器是0x03、它们是 B11。 输入电压范围的 LSB 应为 b000、因为所有通道的范围都是 b0000、它们是 B111。
如果我将功能设置为0、器件将输出:
[0、0、255、255、0、 0]
所有通道。
如果我将功能设置为1、器件将输出:
[0、0、255、255、240、 0]
所有通道。
SPI 模式正确、我已经尝试了所有其他模式。 模式0和3在寄存器写入/验证功能立即失败、模式2的工作方式与模式1相同。
我现在花了3天的时间来尝试解决这个问题、但我运气不好。 我可以得出芯片故障的结论。 请提供帮助。
哦、和命令确实起作用、即、如果我设置一些寄存器、然后发出0x85命令、寄存器将返回默认值。
谢谢、
STEWie