用L138的spi口读写ads1210(24位AD转换),Linux下写的程序。写数据能用示波器测到ads1210的SDIO pin有信号,跟我写的内容一致。SCLK也有信号,但ads1210输出信号一直是3.3v。已确认AD输入电压没有问题,2.9v,没有溢出。Spi读到的数据是0x00ffff。用的函数是参考linux内核文档示例,open(…),read(..),write(…)。
哪位高人有过类似设计,能否指点一二,不胜感激!!!
Tony Tang:
SPI的数据寄存器是16bit宽的,你的AD是24位宽的,我觉得需要根据ADC的手册看一下它输出数据的格式,最起码是要两次的数据才能拼成一个完整的24bit。
Calvin Shao:
回复 Tony Tang:
不是格式的问题,而是用SPI端口输出信号有问题。
Linux 下编程,按照以下方式编程控制SPI读、写。
打开设备
spi_fd = open( "/dev/spidev1.0" , O_RDWR);
写操作
uint8_t *txVal;
ret = write(spi_fd, txVal, 1);
读操作
uint8_t rxVal[3];
ret = read(spi_fd, &rxVal, 3);
现在的问题是,写一个8位数,测到的SCLK信号为8个脉冲,等几个周期又来8个脉冲。同时测数据信号,8位数据对应的是第一轮8个脉冲。给人的感觉是SPI发送了两个8bit数,一个是我需要发的,一个是0x00。
读操作就更奇怪了,读24位数,回来的是8个脉冲,然后32个脉冲信号。如果是读8bit数,就是8+16个脉冲。
这种现象是否正确?有哪位大虾Linux编程碰到过,怎么解决的?