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.

[参考译文] TMDX654IDKEVM:SPI 测试接头 J20芯片选择引脚

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/926932/tmdx654idkevm-spi-test-header-j20-chip-select-pin

器件型号:TMDX654IDKEVM

你(们)好。

我们的设置如下所示:

- Code Composer Studio v9.1.0.00010
- AM65XX v1.0.5的 PDK
- XDC 工具 v3.55.02.22
IPC v3.50.03.05
-NDK v3.60.00.13

我们需要使用外部 SPI 器件测试 SPI 功能。 根据我的理解、调用 SPI_transfer 时、驱动器应处理芯片选择引脚。 是这样吗? 这是通过将 SPI_v1_HWAttrs.chNum 字段定义为0或1来完成的、这将对应于芯片选择0和1。 在测量 J20测试接头的引脚时、我可以成功测量通过 SCLK 和 D0引脚传输的正确数据。 但是、CS 引脚上没有任何反应。 经进一步调查、此引脚直接连接到未放置在电路板上的 R317和 R316、l:

如果没有到 MPU 的物理连接、芯片选择功能将如何工作? 您建议我怎样做才能测试 SPI 功能? 使用不同的引脚作为 GPIO 可能起作用、但这有点令人失望、因为我应该在其中焊接一个电阻器、或者使用 GPIO 模块。

此致

Johnny

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

    您好、Johnny、

    SPI1_CS0和 SPI1_CS1分别连接到显示控制器和 HDMI 控制器。

    您必须为 CS 安装电阻器才能转到测试接头。

    这在通道3.3.14下的 IDK 用户指南中进行了说明。

    https://www.ti.com/lit/ug/spruim6/spruim6.pdf?ts=1596065930431&ref_url=https%253A%252F%252Fwww.ti.com%252Ftool%252FTMDX654IDKEVM

    此致、
    斯坦利

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

    您好、Stanley、

    感谢您的回复。

    我将电桥焊接到 R316上、可以在测试接头上看到 CS1信号成功切换。

    但是、我在 SPI 事务的接收缓冲区中接收到正确的数据时遇到问题。 请参阅以下内容:

    1.我首先按如下方式设置 SPI 实例1的 SPI_v1_HWAttrs:

    SPI_socGetInitCfg (1、&spiCfg);
    spiCfg.baseAddr = CSL_MCSPI1_CFG_base;
    spiCfg.enableIntr = 0;
    spiCfg.chNum = 1;
    SPI_socSetInitCfg (1、&spiCfg); 

    然后、我调用 SPI_Params_Init 函数并使用与外部 SPI 器件兼容的默认参数(SPI_POL0_PHA0和1MHz 时钟)。

    然后、我打开 SPI 实例:

    hSpi1 = SPI_open (1、&spiParams); 

    我现在需要通过 SPI 将0x05字节发送到外部 FRAM 器件、该器件应返回1个字节、如数据表中所示:

    因此、我将 SPI 事务设置如下:

    uint8_t framRxBuf[100];
    uint8_t framTxBuf[100];
    uint32_t transferLength;
    
    while (1)
    {
    
    //读取状态寄存器
    framTxBuf[0]= RDSR;//0x05 = RDSR
    传输长度= 2;
    
    //初始化 SPI 事务
    transaction.count =传输长度;
    transaction.txBuf = framTxBuf;
    transaction.rxBuf = framRxBuf;
    
    //进行事务,并将收到的回复存储在 framRxBuf 中
    SPI_TRANSFCTION (hSpi1、事务);
    
    Task_sleep(1000);
    } 

    我希望现在接收缓冲区中接收到"0 1 0 0 0 0 0"。 但是、从我的接收缓冲区中可以看出、接收到的数据全部为0 (task_sleep 处的断点):

    当我测量连接到测试接头上 DI 引脚的外部 SPI 器件的数据输出引脚时、我会看到正确的信号。 前8个时钟是在 RDSR 命令期间、而后8个时钟是在外部 SPI 器件的输出线上发送的数据。 从下面的测量结果可以清楚地看出、预期的" 0 1 0 0 0 0 0"实际上会发送回 EVM:

      

    您现在在我的软件中做了哪些错误、但我没有收到实际传输的正确数据吗? 交易的盘点成员应等于什么? 它应该包含整个事务的大小(MOSI + MISO 字节)还是仅包含 MOSI 字节? 我还可以确认我的硬件连接是否正确。 我尝试更改事务的计数大小、但这不会执行任何操作、只会增加在 rxBuf 上接收到的0的数量。

    因此、我认为我的 SPI 参数设置不正确、硬件故障或只是 SPI_TRANSFORTURE API 的完全错误使用。

    我期待收到一份答复。

    此致、

    Johnny Smith

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

    也许只是一次更新。 当我将源代码移植到示例 RTOS 应用程序中时、我的 SPI 事务正在工作。 因此、在.cfg、initmmu 函数中或在某些内容中都有一些设置不正确。

    我注释了实际应用中仅运行 SPI 任务的所有其他功能。 但这不奏效。 我正在继续进行调查,但我希望在此期间得到答复。

    此致、

    Johnny Smith

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

    在示例代码中、有一个电路板初始化函数被用来配置时钟/引脚复用/等

    您是否已将其从您自己的应用程序中删除?

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

    引脚多路复用器不适用于我的电路板。 更改引脚复用后、接收数据按预期工作。

    感谢你的帮助。