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.

[参考译文] AFE4403EVM:AFE4403 SPI 读取中存在问题。

Guru**** 2518330 points
Other Parts Discussed in Thread: AFE4403, AFE4400, AFE4403EVM

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1173056/afe4403evm-issue-in-afe4403-spi-read

器件型号:AFE4403EVM
主题中讨论的其他器件:AFE4403AFE4400

您好!

我使用的是 AFE4403 EVM 板、为了与外部 MCU (Arduino)进行 SPI 通信、我删除了 EVM 用户指南表3中给出的寄存器。

写入任何寄存器都没有问题、但当我尝试读取时、我得到的值是一半。 例如、如果我在寄存器 A 中写入8、那么当我读取寄存器 A 时、我得到4

我要附上逻辑分析仪的图片、操作顺序如下所示:

绿色框= SPI 读取禁用(AFE 为写入做好准备)

粉色框  = 将0x8写入地址0xA。

红色框 = SPI 读取使能(AFE 准备读取)

蓝色框= 从寄存器0xA 读取0x4。   (我之前在0xA 中存储的内容的一半)

。    

读取代码:

     
案例"B"//AFE 读取
   EnableAFERead (10)
   
   serial.println ("#Read from AFE Addr! 您可以键入 Q 退出此状态")
   serial.print ("Addr:")
   while (Serial.available ()= 0){}
   OutputTypeS=Serial.Read()
   if (OutputTypeS='Q'){
    OutputType=OutputTypeS;
    while (Serial.read()>=0){}
   
   否则
    lowInt=OutputTypeS-'0'
     
    while (Serial.available ()= 0){}
    midInt=Serial.Read()-'0'
     
    while (Serial.available ()= 0){}
    highInt=Serial.read()-'0'
    while (Serial.available ()= 0){}
    SUPhighInt=Serial.read()-'0'
    
    SPIval16[0]=1000*lowInt+100*midInt+10*highInt+SUPhighInt
    
    serial.print (SPIval16[0])
    serial.print (" )

    receivedVal = AFE4400_read_Register (10SPIval16[0])

    serial.print ("我们得到了:")
    serial.print (receivedVal)
    serial.print ("\n")
   
   digitalWrite (SS、HIGH)
  
   OutputType = 0
   中断;
void EnableAFERead (字节 cs){
 字节到写入[3]=0x00、0x00、0x01
 writeAFERegister (cs、0x00、toWrite)
 }
void writeAFERegister (字节 cs、字节 thisRegister、字节 AFEValue[])
digitalWrite (SS、low)
 字节 addrToSend = thisRegister;
 spi.transfer (addrToSend)
 SPI.transfer (AFEValue[0])
 SPI.transfer (AFEValue[1])
 SPI.transfer (AFEValue[2])
 }
unsigned long AFE4400_read_Register (字节 cs、字节 addrToRead){
 无符号整型结果= 0 //返回结果
 无符号整型结果 TEMP[3]=0、00
 digitalWrite (SS、low)
 serial.print (addrToRead)
 spi.transfer (addrToRead)
 resultTEMP[0]= SPI.transfer (0x00)
 resultTEMP[1]=SPI.transfer (0x00)
 resultTEMP[2]=SPI.transfer (0x00)
 //resultTEMP[3]=SPI.transfer (0x00);
 结果= resultTEMP[0]<<16 | resultTEMP[1]<<8 | resultTEMP[2]
 返回(结果)
 delayMicroseconds (1)
 digitalWrite (SS、HIGH)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问题2:

    此外、我验证下面给出的主题中提到的所有步骤、一切正常、但我的"TX_CTRL_SUP = LED_DRV_SUP = 4.9V"。 我正在使用 PC 上的 USB 端口(J4)为 EVM 供电。 这是好吗?

    e2e.ti.com/.../2037431

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

    问题3:

    我正在分别从寄存器46和47读取 LED1和 LED2的数据、因此是否存在验证接收到的数据是否正确以及如何将这些代码值转换为 PPG 信号的方法?

    这意味着"请注意、与许多出版物中显示的波形相比、该值会反转。" AFE4403数据表中提到的有关寄存器2E 和2F 输出的信息。 这是否意味着将接收到的值(例如下图中给出的值)转换为二进制数并将 "0"反相 为 "1" 、反之亦然?

    很抱歉、我同时提出了多个问题、但我这样做是为了节省时间。 到目前为止,我提出了3个问题。  

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

    您好!

    没问题。

    由于您仍然使用 EVM 板、这很好、可用于验证 SPI 通信。

    ----------------------------------------------------

    请告诉你

    1.首先记下和/或屏幕截图您在使用 Arduino 时遇到的几个 SPI 错误/不匹配?

    例如、写入或读取任何特定寄存器、并执行 SPI 的屏幕截图。

    2.希望在将 EVM 与 EVM GUI 正确配合使用时、仍可以将其重置为出厂默认设置。

    然后、尝试使用 GUI 复制 EVM 上执行的步骤1、并观察/截屏 SPI 通信。

    然后、您将获得用于 A/B 测试(比较)的1 (带 GUI 的 EVM)和2 (带主机的 EVM)的 SPI 通信波形、以了解正确 SPI 的位置和方式以及可能需要更改的内容。

    --------------------------------------------------

    具有 GUI 的 EVM 的屏幕截图应与数据表时序图相匹配  

    图7-1. 串行接口时序图、读取操作

    图7-2. 串行接口时序图、写入操作

    8.5.2.2读取数据

    8.5.2.1写入数据

    谢谢

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

    您好!  

    我算出了 SPI 读取、现在我获得了我之前存储的正确值。

    我使用 AFE4403的内部时钟并使用 AFE 时钟(4MHz)作为主器件、并使用 表8-2。 AFE4403数据表中 SPI 寄存器的时钟边沿映射 、用于 AFE 配置。

    我移除了 SPI 电阻器、因此我认为无法使用 EVM 的 GUI、但我仍在使用 EVM USB 电源为 AFE4403加电。 我正在使用外部 MCU (Arduino uno)。

    现在、您能不能帮助我解决上面提出的问题2和问题3。

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

    您好!

    请允许我们额外提供24小时服务、以便与您联系。

    谢谢

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

    您好!

    对于问题2 "my "TX_CTRL_SUP = LED_DRV_SUP = 4.9V"。 我正在使用 PC 上的 USB 端口(J4)为 EVM 供电。 这是好吗?"

    "TX_CTRL_SUP = LED_DRV_SUP = 4.9V"在数据表规格范围内。

    "使用 PC 上的 USB 端口(J4)为 EVM 供电。  用户指南"将 micro-USB 接口电缆插入 EVM 上的 J4 micro-USB 连接器"也建议使用"。

    ----------------------------------------------------------------

    我是否可以问您是否仅将 EVM 连接到 PC? 或者、是否还有其他电路板或电源中有任何导线连接到 EVM?

    如果有任何其他导线、电源或电路板连接到 EVM、我可能建议-

    断开所有未随 EVM 提供的其他外部器件/电线/电路板、并使用用户指南 5.1电源和表2首先检查/验证电压。

    --------------------------------------------------

    在问题3之前、请确保问题2已经过验证、希望您能够使用 AFE4403EVM GUI 读取一些信号或波形、例如用户指南图46。   <--让我们称之为步骤/问题#2.5

    ----------------------------------------------------

    对于问题3、

    首先、如前所述、您是否能够按照用户指南执行 步骤/问题#2.5? 并且、希望在 ADC 代码和电压中记录和保存/存储一些波形。

    然后、在这之后、您可以继续使用您的设置/系统、并尝试对 您的系统执行相同的步骤/问题#2.5 (配置与步骤/问题#2.5中相同的寄存器值)、 然后、您可以在  问题3中绘制和比较步骤/问题2.5中的波形结果以及系统中的数据(ADC 代码)、看看它们是否具有可比性?  

    ----------------------------------------------------------------

    强烈建议绘制转换/数字化的 ADC 代码进行比较。

    ----------------------------------------------------

    要转换 ADC 输出代码、请参阅数据表

    表8-4显示了 ADC 输入电压与其输出代码的映射。 表8-4. ADC 输入电压映射

    ------------------------------------------------------------------

    关于"请注意、与许多出版物中显示的波形相比、该值会反转。"

    我需要先与其他工程师进行讨论、然后再返回给您。

    谢谢