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.

[参考译文] AFE4300EVM-PDK:无法通过 SPI 与 MediaTek IOT 解决方案 AI76x7配合使用

Guru**** 2551110 points
Other Parts Discussed in Thread: AFE4300

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/627376/afe4300evm-pdk-not-working-with-mediatek-iot-solution-ai76x7-over-spi

器件型号:AFE4300EVM-PDK
主题中讨论的其他器件:AFE4300

大家好、

我正在努力通过 SPI 将 AFE4300 (使用 PDK 进行评估)与 MediaTek IOT 芯片组76x7相连。 我所面临的基本问题是无法读取寄存器、RDY 引脚也不会变得很低、让我读取 ADC 数据寄存器。  

下面是我迄今所做的工作的简要总结。  

a.电源[PDK 的 J102连接器]:-

我使用 MMB3板为 AFE4300 PDK 供电、并通过 SPI 连接 MediaTek 芯片组。 在此之前、我确保 PDK 可以使用 TI 提供的 GUI 应用。

b. SPI 连接[PDK 的 J103连接器 ]:-  

SPI CLK:- 2MHz (在 AFE4300 PDK 中使用)

2. RDY :-输入 GPIO 引脚(始终显示为高电平)

3. RST:-输出 GPIO 引脚(工作正常)

4. mosi:-我可以在这条线上看到数据。

5. MISO:-它默认为低电平,但当执行写操作或执行读操作时,它会变为高电平,因此输出始终为(0xFFFF)

6. STE:-在通过 SPI 访问 AFE4300期间,工作正常,工作正常。

7. AFE CLK:- 1MHz,如数据表中所建议。

8. GND:-连接至 MediaTek 芯片组开发板接地引脚

c. MediaTek 中 SPI 控制器的 SPI 配置(使用 MediaTek LinkitSDK 4.5.1V 中提供的 HAL SPI 驱动程序、对于76x7为公共配置):-  

MSB 位优先。

SPI CLK -> 2MHz

CLK 相位= 1.

4. CLK 极性= 0

 

D.软件驱动程序和测试:-

我可以通过逻辑分析仪看到我尝试写入的任何数据。

要开始初始化,我已将 afe4300寄存器配置为以下值:-

 WRITE_REG (REG_ADC_CTRL1、0x5140);

WRITE_REG (REG_MISC_R1、0x0000);

WRITE_REG (REG_MISC_R2、0xFFFF);

WRITE_REG (REG_DEV_CTRL1、0x0004);//关闭两个信号链

WRITE_REG (REG_ISW_MUX、0x0000);

WRITE_REG (REG_VSEN_MUX、0x0000);

WRITE_REG (REG_IQ_MODE、0x0000);

WRITE_REG (REG_WS_CTRL、0x0000);

WRITE_REG (REG_BCM_DAC_FREQ、0x0040);

WRITE_REG (REG_DEV_CTRL2、0x0000);

WRITE_REG (REG_ADC_CTRL2、0x0011);

WRITE_REG (REG_MISC_R3、0x00C0);

以下是逻辑分析仪的输出:-  

但是、当我尝试读取同一个寄存器时、它始终如逻辑分析仪中所示。 另外,当我在配置后尝试读取 ADC 寄存器以进行重量测量时,如下面所述。 就绪引脚未将其状态更改为低电平。

配置体重秤测量值:-  

 WRITE_REG (REG_ADC_CTRL1、0x4120);//差分测量模式、32SPS

 WRITE_REG (REG_DEV_CTRL1、0x0005);//加电称重秤信号链

 WRITE_REG (REG_ADC_CTRL2、0x0000);//ADC 选择称重秤的输出

 WRITE_REG (REG_WS_CTRL、WS_CTRL_PGA_GAIN (DAC_GAIN_3));//增益= 3 DAC 偏移=-1

 WRITE_REG (REG_BCM_DAC_FREQ、0x0040);//频率=默认值

 WRITE_REG (REG_IQ_MODE、0x0000);//禁用 IQ 模式

 WRITE_REG (REG_ISW_MUX、0x0000);//通道 IOUTP1和 IOUT0

 WRITE_REG (REG_VSEN_MUX、0x0000);//通道 VSENSEP1和 VSENSEN0

我也关注了 E2E 论坛中发布的几个相关问题。  

在这方面,我要求得到帮助和指导。

提前感谢您的帮助

谢谢你

此致、

Nitish

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

    我们已收到您有关 AFE4300的查询、下周将再次与您联系。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nitish、

    让我们首先使寄存器写入工作。 您可以在启用和禁用体重秤信号链的同时测量 VLDO 引脚。
    按所示顺序操作
    1) 1)复位器件
    2) 2)测量 VLDO
    3) 3)启用体重秤
    4) 4)测量 VLDO

    您还可以共享寄存器读取例程吗?

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

    Prabin、您好!

    感谢您的快速响应。
    我按照上述步骤操作、在打开 WS 模式时发现电压为1.7V。

    我将使用 MediaTek 提供的 Linkit 4.5V SDK 进行此评估。
    以下是我的读写函数:-
    //写入函数
    STATUS_t WRITE_reg (uint8_t reg、uint16_t 值)

    uint16_t ret;
    HAL_SPI_MASTER_SEND_and_Receive_config_t TX_CONFIG;

    //[SPI 数据包: ]
    //TX 数据缓冲区
    reg = reg & 0x1f;
    uint8_t TX_SPI_DATA[3]={(uint8_t) reg、(uint8_t)(value >> 8)、(uint8_t)(value & 0xFF)};

    //RX 数据缓冲区-在本例中为零。
    uint8_t Rx_SPI_DATA[3]={0x0、0x0、0x0};

    tx_config.send_data = TX_SPI_DATA;
    tx_config.send_length = 3;
    TX_CONFIG.Receive_buffer = Rx_SPI_DATA;
    TX_CONFIG.Receive_length = 3;

    RET = hal_SPI_MASTER_SEND_and_Receive_Polling (0、&TX_CONFIG);
    if (ret!= HAL_SPI_MASTER_STATUS_OK)

    LOGE ("SPI 写入失败\n");
    返回错误;
    };
    Logd ("写入:[Tx]:Reg=%.2x、Data1=%.2x、Data2=%.2x、[Write_Val 0x%4x]\n"、TX_SPI_DATA[0]、TX_SPI_DATA[1]、TX_SPI_DATA[2]、Value);

    返回正常;


    //读取函数
    STATUS_t READ_reg (uint8_t reg、uint16_t *值)

    uint16_t ret;
    HAL_SPI_MASTER_SEND_and_Receive_CONFIG_t Rx_CONFIG;

    //从 afe4300读取数据
    // bit 21中的"1"=寄存器的读取操作 20 =数据寄存器0
    reg = reg & 0x1f;
    uint8_t TX_SPI_DATA[3]={(uint8_t)(reg | 0x02)、0x00、0x00};
    uint8_t Rx_SPI_DATA[3]={0x00、0x00、0x00};

    IF (reg > REG_MAX_ADDR)

    LOGE ("读取被拒绝-无效寄存器\n");
    返回 AFE4300_ERROR;


    rx_config.send_data = TX_SPI_DATA;
    rx_config.send_length = 3;
    RX_CONFIG.Receive_buffer = RX_SPI_DATA;
    RX_CONFIG.Receive_length = 3;

    RET = hal_spi_master_send_and_receive_polling (afe4300_spi_master_port、&rx_config);
    if (ret!= HAL_SPI_MASTER_STATUS_OK)

    LOGE ("SPI 读取失败\n");
    返回错误;
    };
    *值= 0x00;
    *值=(uint16_t) Rx_SPI_DATA[1];
    *值<<= 8;
    *值|=(uint16_t) Rx_SPI_DATA[2];
    Logd ("读取[Rx]:Reg =%.2x、Data1=%.2x、Data2=%.2x、[Read_Val 0x%x]\n"、Rx_SPI_DATA[0]、Rx_SPI_DATA[1]、Rx_SPI_DATA[2]、value);

    返回正常;


    要打开 AFE4300的 WS 缩放模式、
    WRITE_REG (0x09、0x6005);
    我还在生成1MHz 的 MCU_CLK。 如前所述、我使用电源 MMB3板为 AFE4300-PDK 板供电。

    此致、
    Nitish

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

    我找到了这个问题。 实际上、在读取操作中、我必须在读取后添加写入寄存器的代码。因此、当我在读取时不写入 DEV CTRL 寄存器。 它实际上正在擦除该值并将 VLDO 断电。

    再次感谢您的帮助。
    此致
    Nitish