各位工程师好,我现在遇到6678的spi通信问题,研究受阻,希望工程师能够予以帮助!
主要问题如下:
我们选择的SPI从设备为ADS1298芯片,希望通过6678写进指令让其采集外界数据。例程采用的是论坛上提供的“K1_STK”开发包中的SPI部分。
我的程序流程为:先配置ADS1298,即向ADS1298寄存器中写入指令,在配置成功后,等待DRDY返回低电平信号,再通过中断来读取ADS1298中的数据到上位机。
部分函数如下:
void ADS1298_Config( void )
{
KeyStone_SPI_TxRx(Config_Info, 0, 24, NULL, 0, 0, SPI_CS_NO_HOLD, FALSE, 0, 0);
}
Config_Info信息如下,
static Uint8 Config_Info[24] = {0x41,0x10,0x86,0x12,0xCC,0x03,0x60,0x60,0x60,0x60,0x60,0x60,
0x60,0x60,0x06,0x02,0xFF,0xFF,0x00,0x57,0x02,0x02,0x0A,0xDC};
while(1)
{
if(gpioReadInput(GPIO_14) == 0)
{
int k,i,l;
k = KeyStone_SPI_TxRx(NULL, 0, 0, Data_From_ADS , 0, 27, SPI_CS_NO_HOLD, FALSE, 0, 0);
printf("读取ADS1298的数据位数为: %d\n", k);
j = send( s, Data_From_ADS, 27, 0 ); //向上位机发送数据27字节
printf("向上位机发送数据位数为: %d\n", j);
break;
}
}
问题:
我这样做是否就代表可以将 Config_Info[24]数组中的信息发送给从设备ADS1298呢,如何设计实验验证?
实际测试中发现,SPI的时钟信号是存在的。但是ADS1298的DRDY信号返回一直不正常,即没有正确采样,请问一下这是怎么回事?
Zhan Xiang:
SPI在读数据时要通过写数据来驱动clock,通常读数据是有格式要求的,一般要写个命令,从设备会把数据返回,看你的代码貌似写的全0. 你可以再看看手册怎么读取数据。
dodge:
回复 Zhan Xiang:
谢谢Zhan Xiang ! 就是说在写入配置寄存器命令后,还要继续写入一条命令才能读取从设备中的数据,对吗?