TI中文支持网
TI专业的中文技术问题搜集分享网站

L138 arm core Linux 编程SPI1读写ADS1210

用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编程碰到过,怎么解决的?

赞(0)
未经允许不得转载:TI中文支持网 » L138 arm core Linux 编程SPI1读写ADS1210
分享到: 更多 (0)