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.

[参考译文] AFE7769D:SPI 通信问题

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

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1483146/afe7769d-spi-communication-problem

器件型号:AFE7769D

工具与软件:

您好!


我们在与 AFE7769D 通信时遇到问题。
我们使用 Agilex5 (Intel) CPU 作为主机。
我有如下问题。

  1. 电源、时钟
    根据数据表、在 H/W 复位后、将进入 AFE7769D 上电复位模式。
    为了正确地与 AFE7769D 通信(SPI)、我认为应首先正确地对 AFE7769D 进行复位和初始化。
    对于端口初始化、应满足电源条件和参考时钟(提供给 AFE7769D)。
    顺便说一下、这可能看起来很明显、但您能解释一下为什么 AFE7769D 的基准时钟输入很重要吗?
    因为我的硬件工程师说基准时钟不工作。

    已验证电源是否满足第7.3节建议运行条件中所述的条件。
    是否还应该满足第7.1节"绝对最大额定值"中所述的功率条件?

  2. SPI 模式
    如果您查看 SDK 随附的库、会发现 SPI 写入/读取函数中的代码是空的。
    (将其描述为"/* TBD:用户域*/"作为注释。)
    似乎这是一个需要由库用户写入的器件(以匹配其器件)。
    //CAFE/Afe77xxDUser/Src/tiAfe77D_baseFunc.c
    //...
    TI_AFE_API_COMP uint8_t AFE77DFNP(afeSpiRawWrite)(AFE77D_INST_TYPE afeInst, uint16_t addr, uint8_t data)
    {
        afeLogDbg("WRITE: Address: 0x%X, data: 0x%X", addr, data);
        /* TBD: User domain */
        uint8_t status = ftdi_writeReg(addr, data);
        // AFE77D_FUNC_EXEC(AFE77DFNP(afeWaitMs)(afeInst, 20);
        if (status == 0)
            return TI_AFE_RET_EXEC_PASS;
        else
            return TI_AFE_RET_EXEC_FAIL;
    }
    
    /**
        @brief AFE SPI read driver function.
        @details AFE SPI read driver function and returns the read value as pointer. The contents of this function should be replaced by host SPI driver function.
        @param afeInst AFE Instance of AFE77D_INST_TYPE type
        @param addr Address to be read from.
        @param readVal Pointer return of the value read.
        @return Returns if the function execution passed or failed.
    */
    TI_AFE_API_COMP uint8_t AFE77DFNP(afeSpiRawRead)(AFE77D_INST_TYPE afeInst, uint16_t addr, uint8_t *readVal)
    {
        /* TBD: User domain */
        *readVal = 0;
        // AFE77D_FUNC_EXEC(AFE77DFNP(afeWaitMs)(afeInst, 20);
        *readVal = ftdi_readReg(0x8000 | addr);
        afeLogDbg("READ: Address: 0X%X, Read Val: 0X%X", addr, *readVal);
        return TI_AFE_RET_EXEC_PASS;
    }
    //...

    为了设置 SPI 通信、似乎需要更改 SPI 模式以匹配从器件、如下面的 URL 所示。
    https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1338667/afe031-spi-communication-problem/5126881?tisearch=e2e-sitesearch&keymatch=AFE7%20spi%20lsb#5126881
    https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1281553/afe881h1evm-spi-read-issue-with-afe-board?tisearch=e2e-sitesearch&keymatch=afe%2520spi%2520read#

    在数据表中、我似乎需要使用1写入从器件、使用0读取从器件。
    中的 main.c 文件。 串行外设接口(SPI)部分中对其进行了如下说明。
    Data is input into the device with the rising edge of SCCLK.
    Data is output from the device on the falling edge of SCLK.
    The SPI registers-except for global register GLOBAL0 and GLOBAL1 - are reset by writing a "1" to GLOBAL_SOFT_RESET in the GLOBAL0 register.

    我想知道的是、从主器件写入时将 SPI 模式设置为1、从主器件读取时将 SPI 模式设置为0是否正确?
    我正在使用以下 SPI 配置:
     - SCLK:10MHz
     - CS:低电平有效
     - SPI 模式:1 (写入)、0 (读取)
     -数据顺序: LSB 优先
     -主设备: Agilex5 (Intel)

此致、

JUNG。

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

    尊敬的 Jung:

    [报价 userid="637672" url="~/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1483146/afe7769d-spi-communication-problem ]顺便说一句、这可能是显而易见的、但是您能解释一下为什么 AFE7769D 的基准时钟输入很重要吗?
    因为我的硬件工程师说参考时钟不能工作。[/报价]

    仅对于初始 SPI 通信、要读取器件 ID 或器件版本、参考时钟并不重要。

    当为平台中所需的操作配置 AFE 时、参考时钟和参考频率开始发挥作用。

    Unknown 说:
    已验证功率是否符合第7.3节"建议运行条件"中所述的条件。
    是否还应满足第7.1节"绝对最大额定值"中所述的功率条件?

    绝对最大额定值仅仅表示了器件在系统中发生任何电源轨干扰时可以处理的最坏情况下的电源电压。 超过这些电压、AFE 可能会永久损坏。

    因此、使用第7.3节中的标称电压就足够了。

    Unknown 说:
    ]如果您查看随 SDK 提供的库、则 SPI 写/读函数内的代码为空。
    (将其描述为"/* TBD:用户域*/"作为注释。)
    似乎这是一个需要由库用户编写的器件(以匹配其器件)。

    是的、这是正确的。 我们在 AFE EVB 上使用 FTDI 芯片、并为其添加了 FTDI 相关代码、您必须替换该行以匹配任何处理器可以提供的内容。

    对于 SPI 设置:

    1. SCLK 频率:10MHz
    2. CS:低电平有效
    3. SPI 模式:0表示写入 AFE、1表示从 AFE 读取
    4. 数据顺序:MSB 优先
    5. 数据锁存器:写入 AFE 的正边沿、读取 AFE 的负边沿。
    6. 主设备:FTDI 或 Agilex (只要正确满足条件)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Neeraj Kumar Sharma。

    感谢您的回答。

    我已如您所述修改了 SPI 配置。(首先是 MSB、SPI 模式)

    我尝试读取芯片 ID。 但响应数据似乎是无效的。

    当我尝试读取操作时、示波器波形如下所示:

    CH1 (黄色):Cs.

    CH2 (蓝色):SCLK

    Ch3 (紫色):mosi.

    CH4 (绿色):MISO

    在此波形中、 末尾的第三个位设置为1、因此发送0x8004。

    (由于该数据是读取命令、因此我将 MSB 设置为1。)

    但响应数据似乎是无效的。

    您能建议我做些什么吗?

    此致、

    JUNG。

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

    尊敬的 Jung:

    为了添加更多 SPI 设置、地址长度为16位、数据长度为8位。 因此、数据包的总长度必须为24位。 请记录24个时钟周期的波形。

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

    您好、Neeraj Kumar Sharma

    感谢您的回答。

    我尝试传输24位宽度数据。

    为了将数据与24位宽度对齐、我发送了0x8004。

    但是、响应数据似乎仍然无效。

    波形如下所示。

    如果您能让我知道我应该检查哪些其他设置、我将不胜感激。

    此致、

    JUNG。

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

    尊敬的 Jung:

    要将数据与24位宽度对齐、我发送了0x8004.

    请参阅图8-128:数据表中的 SPI 读取总线周期。

    您实际上必须在前16个时钟周期发送0x8004、然后再将时钟保持8个周期才能接收数据。 这实际上使数据包长度为24位。