1. 背景:am3358做Master通过SPI读取ADS1274的输出数据。在内核board_am335xevm.c文件下添加了SPI初始化代码,在板子上可以看到spidev2.0节点。读SPI的应用程序用QT实现。
下图为添加的内核SPI代码。
下图为QT应用程序(功能:点击一次button发送一次数据):
2. 问题:ADS1274的SCLK输出一直为1V,DOUT1没有输出。波形如下图:
(黄线DRDY,蓝线SCLK)
(黄线DRDY,蓝线DOUT1)
(ADS1274硬件电路是正常的。把am3358和ads1274断开,ads1274的CLK由外部8M晶振提供,把CLK和SCLK短接,DOUT1输出正常。)
求助一下大家,是SPI节点设置的问题还是QT程序的问题?
多谢!
Eggsy Pang:
先把ADS1274和AM335断开,然后先不用QT程序测试,使下面是一个测试程序看一下有没有CLK:
测试程序使用的是linux自带的一个spidev_test.c程序(下载地址是 https://www.kernel.org/doc/Documentation/spi/)。这个程序的内容就是发送一串16进制数,然后 printf 接收到的内容(不知道这串数有没有什么别的含义)。
下载把这个文件到linux上,用gcc编译一下,生成可执行文件spidev_test放在板子上运行。假设现在就在这个文件的目录下,那么我们输入:
./spidev_test -D /dev/spidev2.0
看一下输出:例如:spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)
FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D