Part Number:ADS131M06
主设备为280049
通过下方代码读取寄存器值,总是会读到0x7FFF的值,
但是如果在第25行 return sendCommand(OPCODE_NULL); 添加断点,则程序能正常读到寄存器值
请问是否在发送Command后需要等待一段时间才可以指定的应答数据?
uint16_t readSingleRegister(uint8_t address) { /* Check that the register address is in range */ assert(address < NUM_REGISTERS); // Build TX and RX byte array #ifdef ENABLE_CRC_INuint8_t dataTx[8] = { 0 };// 2 words, up to 4 bytes each = 8 bytes maximumuint8_t dataRx[8] = { 0 }; #elseuint8_t dataTx[4] = { 0 };// 1 word, up to 4 bytes long = 4 bytes maximumuint8_t dataRx[4] = { 0 }; #endifuint16_t opcode = OPCODE_RREG | (((uint16_t) address) << 7);uint8_t numberOfBytes = buildSPIarray(&opcode, 1, dataTx); // [FRAME 1] Send RREG command spiSendReceiveArrays(dataTx, dataRx, numberOfBytes); // // [FRAME 2] Send NULL command to retrieve the register data // registerMap[address] = sendCommand(OPCODE_NULL); // return registerMap[address];return sendCommand(OPCODE_NULL); }
BarBiQ:
当前采用默认的24bits模式
下图为读取寄存器(ID),发送指令0xA000 的波形图:
C1为CLK,C2为SIMO,C3为SOMI
下图为加断点的情况下发送指令的波形:
C1为CLK,C2为SIMO,C3为SOMI
下图为加断点的情况下接收数据的波形(读取到的数据为0x2601):
C1为CLK,C2为SIMO,C3为SOMI
,
BarBiQ:
ADS131的CS脚是接地的,也就是一直处于选中状态
,
BarBiQ:
TI的大神们帮忙看一下
,
Amy Luo:
您好,
您应该是没有发送完整的帧造成的,如下截图所示,对于大多数命令,一帧中有八个words。在DIN上,主机提供命令,如果启用输入CRC,则提供命令CRC,如果禁用输入CRC则提供一个0 word,以及6个0 words。同时在DOUT上,设备输出来自前一帧命令的响应、表示六个ADC通道的六个ADC数据字和一个CRC字。datasheet 图8-18示出了一种典型的命令帧结构。