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

ADS131M06: 读取寄存器,发送指令后需要延时才能读到正确的寄存器值

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示出了一种典型的命令帧结构。

赞(1)
未经允许不得转载:TI中文支持网 » ADS131M06: 读取寄存器,发送指令后需要延时才能读到正确的寄存器值
分享到: 更多 (0)