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.

[参考译文] ADS8681EVM-PDK:通过 SPI 总线与 Microchip Micro 控制器连接

Guru**** 2398695 points
Other Parts Discussed in Thread: ADS8681

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/790523/ads8681evm-pdk-interfacing-with-microchip-micro-controller-on-spi-bus

器件型号:ADS8681EVM-PDK
主题中讨论的其他器件:ADS8681

主席先生,

我遵循下面提到的 SPI 协议进行连接。

但是、我没有获得正确的数据。

示例

1) 1) ALARM_H_TH_REG 寄存器(地址= 24h)的默认读取结果为 0x99eb。 这也是随机的。

2) 2)我也在此处附上该代码。

请提出建议

此致

Ramesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我要添加流量

    1)发送(写入命令- 0xC800 |寄存 器地址0x24)

    2) 2)放置 0x0000


     

    3) 3)从 SDI 读取数据


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在这里,读取的值不正确。 根据数据表、它应该得到0xFFFF。
    请提出建议
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    主席先生,
    我还有 ADS8681EVM。 我找不到捕获单个写入周期/单个读取周期的方法来关联和更正我的微控制器接口。 请提出建议
    Ramesh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ramesh、
    您的命令(0xC8240000)是读取 ADS8681上的 ALARM_H_TH_REG 寄存器的正确方法。 请注意、应在下一帧中检查来自 ADC 的 SDO 上的数据。 您是否在发出读取命令后将 CONVST/CS 引脚上拉至高电平? 最好将/SDI/SDO/SCLK 和 CONVST/CS 的时序图结合在一起、两个时序帧也会更好。
    要使用 PHI 控制器板捕获 EVM 板上的写入时序、您可以监控 SPI 总线、然后更改"寄存器映射配置"中的寄存器内容。
    谢谢。


    此致、
    戴尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 DALI:

    1)

    是的。  您是否在发出读取命令后将 CONVST/CS 引脚上拉至高电平? 给我正确的方向。

    “读了之后,CS 变得很高”--这对我很有帮助。

    2) 2)数据表不清楚 我应该读取哪个寄存器来获得模拟 转换 值?

    Ramesh

     

     

     

     

     

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    4)对于用于转换的命令为,我采用了0x3000。 (命令的其他组合)、我尝试读取虚拟。
    始终获得固定值(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 上的时钟进行读取。

    如果你有任何进一步的问题,请告诉我,谢谢。

    此致、

    戴尔