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.

[参考译文] AFE4403:读取时 AFE4403为零

Guru**** 2587365 points
Other Parts Discussed in Thread: CC3220SF-LAUNCHXL, AFE4403, AFE4403EVM

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/652461/afe4403-afe4403-gives-zero-when-reading

器件型号:AFE4403
主题中讨论的其他器件:CC3220SF-LAUNCHXL、、

大家好、我将使用 CC3220SF-LAUNCHXL Wi-Fi 板测试定制 AFE4403模块。

如数据表所示、我使用数据0x000001 h 配置寄存器0以启用 SPI_READ。

在2MHz SPI 时钟信号配置为 SPI 模式0的情况下、我在写入 control0寄存器的 SPI_READ 位后尝试读取 LED2数字采样值寄存器(地址= 0x2Ah +读取位= 0xAAh)。

问题是 MISO 始终为零;未从 AFE4403接收到任何值。

通过 SPI 写入值确实可行;在配置 AFE4403的寄存器(例如 CONTRO0~3、TIAGAIN、TIA_AMB_GAIN、LEDCNTRL)后、定制模块具有 SPH7050 LED、红色 LED 亮起。

因此、我的自定义 SPI 读取代码可能有问题、或者我可能没有配置其他寄存器来启用 SPI_READ 功能。

 


我的问题是、

1) 1)与其他 SPI 器件一样、AFE4403是否不使用 MSB 上的读/写位?

持续读取数据表后、AFE4403似乎不使用 MSB 上的 R/W 位、对吧?

2) 2)是否可以读取多个寄存器? 由于上面的"图73"只显示了一个 SPI 读取块。

如果只触发一次 SPISTE、我能否发送几个寄存器地址来读取多个数据?

3) 3)我已经做了一些额外的测试。 设置 SPI_READ 位后、我尝试读取 control0寄存器。

情形1 -在 MSB 处添加读取位

正如预期的那样、AFE4403未返回任何数据。

CASE2-MSB 中的 READ 位

但是、结果是相同的。 看起来 R/W 位不是问题。

我错过了什么? 我已仔细检查 CC3220和 AFE4403模块之间的 MISO 线路连接。

此外、我参考"AFE4403EVM_FW_SRCv2.3"来遵循寄存器配置。

void AFE44xx_Default_Reg_Init (void)
{
Disable_AFE44xx_SPI_Read ();

AFE44xx_ReG_Write ((unsigned char) PRPCOUNT、(unsigned long) PRP);
AFE44xx_ReG_Write (unsigned char) LED2STC、(unsigned long) LED2STC_VAL);
AFE44xx_ReG_Write ((unsigned char) LED2ENDC、 (unsigned long) LED2ENDC_VAL);
AFE44xx_ReG_Write ((unsigned char) LED2LEDSTC、(unsigned long) LED2LEDSTC_VAL);
AFE44xx_ReG_Write (unsigned char) LED2LEDENDC、(unsigned long) LED2LEDENDC_VAL;
AFE44xx_Reg_Write ((unsigned char) ALED2STC、(unsigned long) ALED2STC_VAL);
AFE44xx_Reg_Write ((unsigned char) ALED2ENDC、(unsigned long) ALED2ENDC_VAL);
AFE44xx_Reg_Write (((((unsigned char) LED1C、unsigned LED2ENDC) (无符号长整型) LED1STC_VAL);
AFE44xx_Reg_Write ((unsigned char) LED1ENDC、(unsigned long) LED1ENDC_VAL);
AFE44xx_Reg_Write ((unsigned char) LED1LEDSTC、(unsigned long) LED1LED1LEDSTC_VAL);
AFE44xx_Reg_Write ((unsigned char) LED1LEDENDC、(unsigned long) LED1LEDENDC_VAL);
AFE44xx_Reg_Write ((unsigned char) ALED1STC、(unsigned long) ALED1STC_VAL);
AFE44xx_Reg_Write (((unsigned LED1STC、无符号 AGL) (无符号长整型) ALED1ENDC_VAL);
AFE44xx_Reg_Write ((无符号字符) LED2CONVST、(无符号长整型) LED2CONVST_VAL);
AFE44xx_ReG_Write ((无符号字符) LED2CONVEND、(无符号长整型) LED2CONVEND_VAL;
AFE44xx_Reg_Write ((unsigned char) ALED2CONVST、(unsigned long) ALED2CONVST_VAL);
AFE44xx_Reg_Write (unsigned char) ALED2CONVEND、(unsigned long) ALED2CONVEND_VAL;
AFE44xx_Reg (unsigned VST、CHAR) (无符号长整型) LED1CONVST_VAL);
AFE44xx_Reg_Write ((无符号字符) LED1CONVEND、(无符号长整型) LED1CONVEND_VAL);
AFE44xx_Reg_Write ((无符号字符) ALED1CONVST、(无符号长整型) ALED1VST_VAL;
AFE44xx_Reg_Write ((unsigned char) ALED1CONVEND、(unsigned long) ALED1CONVEND_VAL);
AFE44xx_Reg_Write (unsigned char) ADCRSTCT0、(unsigned long) ADCRSTCT0_VAL);
AFE44xx_Reg_Write (unsigned char (ADCRSTCT0) (无符号长整型) ADCRSTENDCT0_VAL);
AFE44xx_Reg_Write ((无符号字符) ADCRSTCT1、(无符号长整型) ADCRSTCT1_VAL);
AFE44xx_ReG_Write ((无符号字符) ADCRSTENDCT1、(无符号长整型) ADCRSTCT1_VAL);
AFE44xx_Reg_Write ((unsigned char) ADCRSTCT2、(unsigned long) ADCRSTCT2_VAL);
AFE44xx_Reg_Write ((unsigned char) ADCRSTENDCT2、(unsigned long) ADCRSTENDCT2_VAL);
AFE44xx_CHAR_Write (((((unsigned char) ADCRSTCT2、ADCRSTENDCT3) (无符号长整型) ADCRSTCT3_VAL);
AFE44xx_Reg_Write ((无符号字符) ADCRSTENDCT3、(无符号长整型) ADCRSTENDCT3_VAL);

AFE44xx_Reg_Write ((unsigned char) control0、AFE44xx_Current_Register_Settings[0]); //0x00
AFE44xx_Reg_Write ((unsigned char) CONTROL2、AFE44xx_CURRENT_Register_Settings[35]); //0x23
AFE44xx_Reg_Write ((unsigned char) TIAGAIN、AFE44xx_CURRENT_Register_Settings[32]); //0x20
AFE44xx_Reg_Write ((unsigned char) TIA_AMB_GAIN、AFE44xx_CURRENT_Register_Settings[33]); //0x21
AFE44xx_Reg_Write ((unsigned char) LEDCNTRL、AFE44xx_CURRENT_Register_Settings[34]); //0x22
AFE44xx_Reg_Write ((unsigned char) CONTROL1、AFE44xx_CURRENT_Register_Settings[30]); //0x1E

#ifdef __AFE4403__
AFE44xx_Reg_Write ((unsigned char) CONTROL3,0); //0x31
AFE44xx_Reg_Write ((unsigned char) PDNCYCLESTC、0); //0x32
AFE44xx_Reg_Write ((unsigned char) PDNCYCLEENDC、0); //0x33
#endif
Enable_AFE44xx_SPI_Read();
} 

问题是什么?

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

    在 AFE4403中、寄存器的读写由 control0寄存器的 D0控制。 这意味着、在写入任何寄存器之前、您必须将 control0的 D0设置为"0"、在读取任何寄存器之前、您必须将 control0的 D0设置为"1"。

    例如。 要将0x123写入 PRPCT、您必须按照给定的步骤操作。
    1) AFE44xx_Reg_Write ((unsigned char) control0,0x0);//将 AFE 置于写入模式
    2) AFE44xx_Reg_Write ((无符号字符) PRPCT、 0x123);

    现在、如果您要读取任何寄存器(例如0x2A)、则必须按照给定的步骤操作。
    1) AFE44xx_Reg_Write ((unsigned char) control0,0x1);//将 AFE 置于读取模式
    2) AFE44xx_Reg_Write (0x2A、0x0);
    3) 3)在发送步骤2时对 MISO 线路进行采样。

    因此 AFE4403不使用 MSB 位作为读取/写入位。
    此外、您不应读取 control0寄存器、因为它只能写入。

    此致、
    Prabin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、Prabin。 正如您提到的、您的代码现在使我能够读取 LED 数据寄存器!