如题,摊上一款应用难度超大的ADS1299
博主正在使用Xilinx Kintex-7作为主控芯片对ADS1299进行数据采集,在开发过程中需要自己设计ADS1299的驱动,发现可供参考的资料和blog比较有限,所以写下这篇博文,用于记录ADS1299开发过程中的各种BUG。后续项目完成会将ads1299_driver.v上传供大家食用,欢迎收藏和关注,帮你找到回家的路。
Q1 买的是ADS1299,为啥只能收到4个通道数据???淘宝骗我钱卖给我水货ADS1299-4?
A1: 初始化上电后nPWDN没有足够延时,给个250ms之后就可以解决问题
上图摘自ads1299 datasheet的图67,箭头处可以看见,上电后必须等待tpor时间后才能开始reset。(博主给了个250ms就解决问题了)
wkup_state:
begin
if(counter < t_por) //(t_por>>16 for simulation only)
begin
counter <= counter + 1;
wkup_done <= 1'b0;
end
else
begin
SPI_nRST <= 1'b0;
counter <= 32'd0;
wkup_done <= 1'b1;
end
end
Q2: 单端驱动咋整?
A2:正在使用INxN作为模拟信号输入口进行验证
Q3: 我使用多个ADS1299进行通讯,其中一个ADS1299可以正常通信,也受到了8通道脑电数据(使用RDATA指令),但其他的ADS1299只能收到8’h4B(8’b01001011)???
A3: SPI时钟过快,开到了20MHz,在所搭配的driver上没有与发送的数据位对齐,换而言之,所发出去的MOSI数据不对,导致ADS1299不知道你吧啦吧啦半天到底想说个啥,因而降频为15MHz
Q4:我开了所有通道的test signal,可我只有第一个信号是对的???
将原始数据拉出来一看
大概率是数据丢失造成的。8’h1001xxxx --> 8’h0001xxxx
因而分别进行了不同SPI速率测试,结果发现,SPI_CLK_FRE == 5MHz 后,数据传输稳定性大大提高,继续降低SPI_CLK其数据传输正确率不会继续提高。虽仍有一定程度的数据抖动,但总体来说情况好得多了。
A4: SPI速率过高,导致数据容易丢失,发现将SPI CLK降到5MHz左右可提高数据传输速率
Q5: 更换新批次ADS1299后,发现按照数据设置CONFIG1(0x01)寄存器位0x96时,许多功能不正常,例如采样率等成为不可控制的8KHz,陷入无穷循环的黑人问号???难道我买的是盗版???
A5: Read 0x01默认寄存器后发现,初始值为0x06,并非0x96,但实际改变的数据属于数据手册上的Reserve。。。因而在配置寄存器CONFIG1(0x01)=0x06时功能恢复正常。
Q6: ADS1299有几个通道不连接的时候采集电压为1.7V???
电源,电源,一定是你的电源,直接检测AVDD和DVDD,别问我怎么知道的 V
Q7: 寄存器配置之后行为与所配置的不对应?
问题描述:举例来说,CHnSET配置的明明是0x01作为噪声测试,但实际行为却表现为0x00(正常电极输入),读该寄存器也发现是0x00。
A7:寄存器配置请按照顺序,例如我们不可配置完0x05后又配置0x01或者0x03,配置0x01-0x04的寄存器会影响0x05-0x0C寄存器配置