你好,我使用 ADS131B04 进行产品开发,使用中遇到如下问题还请帮忙解答。谢谢。
1 . SPI 通信时 CRC 不清楚怎么使用,按如下方法使用时无法得到正常的CRC 校验。
初始化代码如下
void adcStartup(void) { /* (OPTIONAL) Provide additional delay time for power supply settling */ delay_ms_ADS131(50); /* (REQUIRED) Set nRESET pin high for ADC operation */ // setSYNC_RESET(HIGH); /* (OPTIONAL) Toggle nRESET pin to ensure default register settings. */ /* NOTE: This also ensures that the device registers are unlocked. */ // toggleRESET(); /* (REQUIRED) Initialize internal 'registerMap' array with device default settings 使用设备默认设置初始化内部“registerMap”数组*/ restoreRegisterDefaults(); /* (OPTIONAL) Validate first response word when beginning SPI communication: (0xFF40 | CHANCNT) (可选)开始 SPI 通信时验证第一个响应字:(0xFF40 | CHANCNT) */ uint16_t response = sendCommand(OPCODE_NULL); /* (OPTIONAL) Define your initial register settings here (可选)在此处定义您的初始寄存器设置*/ // writeSingleRegister(CLOCK_ADDRESS, (CLOCK_DEFAULT & ~CLOCK_OSR_MASK) | CLOCK_OSR_256); writeSingleRegister(CLOCK_ADDRESS, (CLOCK_DEFAULT & ~CLOCK_OSR_MASK) | CLOCK_OSR_4096); /* 设置采样频率 */ /* (REQUIRED) Configure MODE register settings (必需)配置模式寄存器设置 * NOTE: This function call is required here for this particular code implementation to work. 注意:这里需要此函数调用才能使此特定代码实现正常工作。 * This function will enforce the MODE register settings as selected in the 'ads131b04-q1.h' header file. 此函数将强制执行在“ads131b04-q1.h”头文件中选择的 MODE 寄存器设置。 */ // writeSingleRegister(MODE_ADDRESS, MODE_DEFAULT); /* 默认配置 */ writeSingleRegister(MODE_ADDRESS, (MODE_DEFAULT & ~MODE_RX_CRC_EN_MASK & ~MODE_CRC_TYPE_MASK) | MODE_RX_CRC_EN_ENABLED | MODE_CRC_TYPE_16BIT_CCITT); /* 默认配置,增加CRC */ writeSingleRegister(GAIN_ADDRESS, (GAIN_DEFAULT & ~GAIN_PGAGAIN0_MASK) | GAIN_PGAGAIN0_1); writeSingleRegister(GAIN_ADDRESS, (GAIN_DEFAULT & ~GAIN_PGAGAIN1_MASK) | GAIN_PGAGAIN1_1); /* (OPTIONAL) Read back all registers */ /* (OPTIONAL) Check STATUS register for faults */ }
SPI 通信数据 逻辑分析仪抓包如下
问题1:逻辑分析数据与 这个芯片TI官方 SDK 的 readData()函数读取类容相同, 但readData 函数的CRC校验失败,根据数据内容自己进行CRC计算也不符。请问该如何对数据进行 CRC 校验。
问题2:MISO 收到的数据前3个字节经常不同,中间6个字节是通道数据这个数据是正常的。请问 前三个字节数据怎么理解 ,是否是经常变化的数据。
问题3:如图 SDK的 readData函数中 uint16_t crcWordIn = calculateCRC(dataTx, bytesPerWord * 2, 0xFFFF); dataTx长度是4,