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.

[参考译文] ADS1292R:SPI 与 ESP32不兼容

Guru**** 2553260 points
Other Parts Discussed in Thread: ADS1292R, ADS1292

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1124346/ads1292r-spi-not-working-with-esp32

器件型号:ADS1292R
主题中讨论的其他器件: ADS1292

您好!

当我尝试使用函数"ECG_SENSOR_ADS1292R.getAds1292EcgAndRespirationSamples()"时、ESP32将重新启动、它似乎进入了数学无效条件。 您能在这里提供帮助。

此致、

Nitine2e.ti.com/.../3632.ECG.txte2e.ti.com/.../Error.txte2e.ti.com/.../data_5F00_output_5F00_AD1292r.txt 

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

    您好、杨

    感谢您的建议和及时的反馈。

    我尝试了这两个选项、但没有什么对我有用的。 但是、我尝试读取 ADS1292r 的芯片 ID、但这是读取零。

    上面是用于读取寄存器的函数、我将其添加到库文件中。

    char ads1292r:::ads1292RegRead (const int chipSelect、const int pwdnPin、const int startPin、unsigned char REG_address、byte REG_DATA){

    /*//寄存器地址
    #define ADS1292_REG_ID 0x00
    #define ADS1292_REG_CONFIG1 0x01
    #define ADS1292_REG_CONFIG2 0x02
    #define ADS1292_REG_LOFF 0x03
    #define ADS1292_REG_CH1SET 0x04
    #define ADS1292_REG_CH2SET 0x05
    #define ADS1292_REG_RLDSENS 0x06
    #define ADS1292_REG_LOFFSENS 0x07
    #define ADS1292_REG_LOFFSTAT 0x08
    #define ADS1292_REG_RESP1 0x09
    #define ADS1292_REG_RESP2 0x0A */


    //启动 SPI 库:
    ads1292StopReadDataContinuous(chipSelect);// SDATAC 命令
    延迟(300);

    //将(逻辑 ORing)寄存器地址与读取命令操作码 RREG (001R)=h'2组合成一个字节:
    字节 regToRead = REG_ADDRESS | RREG;
    //将芯片选择设置为低电平来选择器件:
    digitalWrite (芯片选择、低电平);
    延迟(10);
    spi.transfer (regToRead);//发送寄存器位置
    SPI.transfer (0x00);//要读取的寄存器数量
    //延迟(100);
    REG_DATA=SPI.transfer (CONFIG_SPI_SLAVE_ADUmy);//发送要记录到寄存器中的值

    //将芯片选择设置为高电平以取消选择:
    digitalWrite (芯片选择、高电平);




    e2e.ti.com/.../ECG_5F00_debug.txt

    请告诉我如何解决该问题。

    此致、

    Nitin

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

    您好、Nitin、

    我不熟悉 ESP32 uController 及其专用 SPI 端口和/或引擎。

    我是否可以询问您是否遵循了数据表第10节和10.1节"加电排序"中提到的正确加电序列和复位?

    您是否会提供有关上述内容的示波器屏幕截图?

    如果以上内容正确、请检查以下内容-

    是否将 SPI 设置设置为 CPOL = 0和 CPHA = 1?

     当您尝试读取 8.6.1.1 ID:ID 控制寄存器(出厂编程、只读)(地址= 00h)时、您能否在 CLK、/CS、SCLK、DIN、DOUT 上进行探测

    并查看探测信号是否遵循 数据表第11页和 第8.5.2.11节"从寄存器读取"和图54中的时序图。

    谢谢

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

    您好、杨

    我已经按照您的要求对信号进行了范围界定、请在下面找到。

    下面是我遵循的启动顺序。

    digitalWrite (pwdnPin、HIGH); //将 RESET/pwdn 引脚拉高1秒。
    延迟(1000);

    digitalWrite (pwdnPin、low);//然后将 RESET 引脚拉至低电平500ms 以生成脉冲。  
    延迟(500);
    digitalWrite (pwdnPin、HIGH);//将其拉高并等待9秒
    延迟(9000);

    ads1292StopReadDataContinuous(chipSelect);// SDATAC 命令  
    延迟(100);
    digitalWrite (芯片选择、低电平);//将 CS 引脚拉至低电平。
    延迟(100);

    如果我错过了任何内容、请告诉我。 此外、我还使用面向 SPI 的 Arduino 命令将 SPI 模式的设置更改为 Mode1。

    SPI.beginTransaction(SPISettings(1000000、MSBFIRST、SPI_MODE1));
    延迟(100);

    如果 我需要在 ADS1292r 中设置任何其他寄存器才能进行更改、请告诉我。

    此致、

    Nitin

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

    您好!

    您是否还会发送 上电序列的示波器图像?

    而且、我假设 MOSI 是 DIN、请澄清我是否错了。

    您尝试读取多少个寄存器?

    您是否遵循数据表第42页并注意到 DIN 锁存在 SCLK 下降沿、DOUT 在 SCLK 上升沿上移出?

    您的主系统是否请求阅读屏幕截图? 即、先在 DIN 中发送操作码、然后在 SCLK 中等待来自 DOUT 的数据。

    我提出这一要求的原因是、从您的屏幕截图中可以看出、开始时 SCK 的下降沿正好与 DIN 的边缘对齐、如果这是为了要求读取、它可能无法正常工作。

    请参阅表15。 以及8.5m Ω 有关如何发送操作码以进行读取或写入的信息2.11~12。

    谢谢。

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

    您好、杨

    是的、MOSI 正确为 Din。 这里、主设备是 ESP32控制器、而 ADS1292r 是从设备。

    我尝试一次只读取一个寄存器、这就是为什么 MOSI 上的数据在第二组 SCLK 上为空的原因、但另一方面、MISO 或 DOUT 本应在第三组 SCLK 上提供一些输出。

    我很快还会为您提供 上电序列的示波器截图。

    此致、

    Nitin

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

    您好!

    谢谢。

    请按照数据表第47页 RREG 操作

    (2) n nnnn =(要读取或写入的寄存器数量)–1。

    例如、要读取或写入三个寄存器、请设置 n nnnn = 0 (0010)。

    r rrrr =读取和写入操作码的起始寄存器地址。

    因此、在您的情况下、如果只读取一个寄存器、n nnnn 应为0 0000。

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

    您好、杨

    这正是我执行 SPI 读取所遵循的内容、但 MISO/DOUT 线路不会读取任何内容。 您是否有我可以尝试的基本 SPI 读取功能?

    此致、

    Nitin

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

    您好!

    先前讨论中的这个问题是否已得到解决?

    "

    您的主系统是否请求阅读屏幕截图? 即、先在 DIN 中发送操作码、然后在 SCLK 中等待来自 DOUT 的数据。

    我提出这一要求的原因是、从您的屏幕截图中可以看出、开始时 SCK 的下降沿正好与 DIN 的边缘对齐、如果这是为了要求读取、它可能无法正常工作。

    "

    此外,我还简要介绍了您的设置(),请问以下内容是什么意思? 您在哪里以及为什么要调用以下内容?

    我提出的原因是、对于 ADS1292R、PWRDN_PIN 为低有效/低有效、因此如果您将其写入低电平、则意味着 ADS1292R 被要求断电。

    如果我误解了您的代码、请更正我。

    "

    digitalWrite (ESP32_V_SPI_CS_PIN、低电平);
    digitalWrite (ADS1292R_PWRDN_PIN、LOW);
    digitalWrite (ADS1292R_START_PIN、HIGH);

    "

    EVM 的源代码是为 MSP430编写的、可能不适合您的 MCU。

    但是、您可以在此处查看 TI 是否提供 ADS1292REVM 的源代码-

    https://www.ti.com/tool/ADS1192ECG-FE

    否则、这意味着 TI 不会为此 EVM 提供源代码。

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

    您好!
    由于我没有听到你的反馈,我相信我的建议回答了你的问题。
    我将关闭此帖子、如果您有任何待处理的问题、请随时将其发布在此处或打开新主题。
    谢谢、祝您愉快!