主题中讨论的其他器件:ADS8681
主席先生,
我遵循下面提到的 SPI 协议进行连接。
但是、我没有获得正确的数据。
示例
1) 1) ALARM_H_TH_REG 寄存器(地址= 24h)的默认读取结果为 0x99eb。 这也是随机的。
2) 2)我也在此处附上该代码。
请提出建议
此致
Ramesh
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
主席先生,
我遵循下面提到的 SPI 协议进行连接。
但是、我没有获得正确的数据。
示例
1) 1) ALARM_H_TH_REG 寄存器(地址= 24h)的默认读取结果为 0x99eb。 这也是随机的。
2) 2)我也在此处附上该代码。
请提出建议
此致
Ramesh
您好 Ramesh、
您的命令(0xC8240000)是读取 ADS8681上的 ALARM_H_TH_REG 寄存器的正确方法。 请注意、应在下一帧中检查来自 ADC 的 SDO 上的数据。 您是否在发出读取命令后将 CONVST/CS 引脚上拉至高电平? 最好将/SDI/SDO/SCLK 和 CONVST/CS 的时序图结合在一起、两个时序帧也会更好。
要使用 PHI 控制器板捕获 EVM 板上的写入时序、您可以监控 SPI 总线、然后更改"寄存器映射配置"中的寄存器内容。
谢谢。
此致、
戴尔
您好 Ramesh、
要读取内部寄存器、可以在帧 F 中向 ADC 发送具有正确地址和格式的 READ_HWORD 或 READ 命令、帧(F+1)的输出数据将包含16位寄存器数据、后跟0、因此我们必须检查下一帧(F+1)中的数据。 由于帧 F 中提供的命令将在 CONVST/CS 信号的上升时执行、这就是我提出这个问题的原因。
要从该 ADC 获取转换数据、没有要读取的寄存器。 对于除 READ_HWORD 或 READ 之外的任何命令、ADC 将在下一帧(F+1)中输出16位转换结果。 请参阅 ADS8681数据表第44页上的说明。 转换完成后、ADC 只需要 SPI 上的时钟来输出转换结果(等待 tconvst_max 或监视 RVS 信号)、因此也可以在帧(F+1)中使用 NOP。 请参阅数据表图5 ~6中的时序。
此致、
戴尔
我想根据您的建议进行进一步更新、
我没有逻辑范围、通过 CRO 进行捕获。
我的微控制器支持16位 SPI 事务、32位不可用。
代码
1) 1)初始化
QSPI_initialize (QSPI、&MODE_CONFIG);//将配置加载到寄存器中
printf ("\r SPI 主控模式\n");
ads8681_REG_WRITE (0x24、0xAAAA);//只在 CRO 上生成数据
2) 2)环路
while (1)
{
DATA_16 = 0;
ads8681_REG_READ (0x24、&DATA_16);
printf ("\r SPI 读取模式添加:0x%x:0x%x\n"、0x24、DATA_16);
delay_us (600);
}
3)
读取函数
STATUS_CODE_t ads8681_REG_READ (uint16_t add、uint16_t *数据_pt)
{
STATUS_CODE_t STATUS = STATUS_ERR_BUSY;
/*写入命令-1 st 32位*/
QSPI_CHIP_SELECT (0);
QSPI_WRITE_SPI (CMD_READ_HWORD |添加);
QSPI_WRITE_SPI (0x0000);
QSPI_CHIP_SELECT (1);
/*虚拟写入第二个命令*/
QSPI_CHIP_SELECT (0);
QSPI_WRITE_SPI (CMD_NOP);
QSPI_WRITE_SPI (0x0000);
(* data_pt)= QSPI_read_ads ();
QSPI_CHIP_SELECT (1);
退货状态;
}
查询
1) 1)我在圆圈中标记为红色,是不需要,/还是由于代码中的 while 循环而出现?
2) 2)我通过不提供 OP 命令在第二个帧上获取数据。 没关系吗?
3) 3)用于读取转换数据,
"对于所有其他组合、帧(F+1)的输出数据字包含最新的16位转换结果。
对 DATAOUT_CTL_REG 寄存器进行编程、以将各种数据标志附加到转换结果中。 数据
标志按照以下顺序附加:"
除数据表表表-5中提到的列表外,我还可以执行任何命令,然后我将在 我的照片中标记的 F +1帧上得到结果
没关系吗?
请将您的答案编号放在明智的位置、以便更好地理解
此致
Ramesh
尊敬的 Dale:
1)我取得了一次成功。
2) I SEND (CMD_WRITE_HWORD | DATAOUT_CTL_REG ) IN F - FRAME,然后在下一帧(F+1)中,我获得了在向 ADC 引脚提供外部输入时正在传播的数据。
3) 3)此命令格式 是否适合读取转换结果?
(此处注 释 CMD_WRITE_HWORD = 0xD000、 DATAOUT_CTL_REG_ADD = 0x10)
此致
Ramesh
您好 Ramesh、
首先、时序图中的信号名称使我感到困惑。 我认为您的"MSI"信号应该是 MISO、这是从 ADC 到微控制器的输出(SDO)。 此外、您的"MSO"应为 MOSI、这是用于将命令从微控制器发送到 ADC (SDI)的信号。 如果我的理解有误、请改正。
1) 1)我认为它是输出数据、与您之前的命令相关。
2) 2)您在两个不同的帖子中有两个问题:
要回答您的问题"我通过不提供 OP 命令来获取第二个帧的数据。 对吧?"、是的。
您显示的最新时序正确、您可以看到 ALARM_H_TH_REG 寄存器的寄存器值在帧(F+1)期间由具有前16个时钟的 ADC 移出到 SDO 行(MSI)、iValue 为0xAAAA、这是正确的、 您之所以得到 ALARM_H_TH_REG 寄存器内容不是默认值0xFFFF、是因为您在代码初始化期间通过写入"REG_WRITE (0x24、0xAAAA)"命令来更改了该寄存器的内容。 因此 、您的命令和时序都是正确的、并且 ADC 工作正常。
对于第二个有关 F - FRAME 中“I SEND ( CMD_WRITE_HWORD | DATAOUT_CTL_REG )”的查询, 然后在下一个帧(F+1)中,我得到了向 ADC 引脚提供外部输入时发生变化的日期。”,正确的做法是,所有其他组合命令的转换数据将显示在帧(F+1)中。 由于"您的数据会发生变化"、我不确定您的信号源是否稳定或您的代码变化量。 实际上、您可以断开 ADC 的模拟输入并检查转换代码、我可以帮助您检查是否可以将代码发送给我。
3) 3)实际上、可以在同一帧 F 内无命令读取转换数据。请参阅 ADS8681数据表中的图3或4、当 CONVST/CS 引脚被下拉至低电平时、ADC 开始转换、 从低电平到高电平的 RVS 信号表示 ADC 转换已完成、ADC 进入采集周期、转换数据已准备就绪、可使用 SCLK 上的时钟进行读取。
如果你有任何进一步的问题,请告诉我,谢谢。
此致、
戴尔