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.

[参考译文] TMS570LC4357:tmdx570lc43hdk 评估板中的 SPI 通信问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1033570/tms570lc4357-spi-communication-problem-in-the-tmdx570lc43hdk-evaluation-board

器件型号:TMS570LC4357
主题中讨论的其他器件:TMDX570LC43HDKHALCOGEN

你好

硬件:

tmdx570lc43hdk 评估板

软件:

通过 HCG 软件工具生成驱动程序代码。

问题:

(1) 通过使用示波器监控 CS 引脚、我发现它始终被下拉。

(2) 仅当再次调用“spiSendAndGetData”函数时,才会检测到 CLK 引脚。  

稍后,我发现在“spisenddata”函数中,只有发送中断标志位被置位,然后在“spiSendAndGetData”函数中设置发送和接收中断标志位。

(3)如果未设置、请使用接收中断、则无法检测到 CLK。

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

    您好、Wanzhao、

    传输完成后、CS 引脚应拉高。 在数据传输期间、CS 引脚被下拉。

    2. SPI 时钟不是自由运行的时钟信号。 只有当数据被写入 SPIDAT 寄存器时、SPI 才会生成 SPI 时钟。

       SendspiData()用于使用中断方法传输数据,因此只启用 TX 中断。  SendspiAndGetData 是在中断模式下发送数据发送数据和接收数据、因此 TX 和 RX 中断都被启用。  

    3.当数据被写入 SPIDAT 寄存器时、SPI 主器件生成 SPI 时钟。 我不完全理解您的问题。

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

    您好、Wang

    我可以理解您的回复、但无法解决我的问题。

    我想通过 SPI 总线连接 MCP2517FD 控制器。 下面是 SPI 接口 要求。

    (1)我尝试将其作为附件代码,但它失败了。 您能告诉我如何通过 HALCoGen 工具配置 SPI 端口吗?e2e.ti.com/.../1346.tms570lc4357_5F00_spitest.rar

    (2)我注意到它需要"8位操作模式"。 我通过 HALCoGen 设置 charlen = 8、但生成的代码中的发送和接收 API 也使用了"uint16_t"。 那么、我如何使用 API 呢? 你能举个例子吗?

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

    您好、Wanzhao、

    2.我们注意到了这个问题。 请手动将 uint16_t 替换为 uint8_t。

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

    你好  

    根据以下代码:

        uint16_t send_data[6] = {0};
        uint16_t recv_data[6] = {0};
        spiDAT1_t dataconfig_t;
    
        dataconfig_t.CS_HOLD = FALSE;      //CS not set hold mode
        dataconfig_t.WDEL    = TRUE;       //set delay time
        dataconfig_t.DFSEL   = SPI_FMT_0;  //default frame 0
        dataconfig_t.CSNR    = 0xFE;       //default CS0
    
    
        send_data[0] = 0x0021;
        send_data[1] = 0x00F0;
        send_data[2] = 0x007F;
        send_data[3] = 0x007F;
        send_data[4] = 0x007F;
        send_data[5] = 0x007F;
    
    
        muxInit();
        spiInit();
        _enable_interrupt_();
    
    
        while(1)
        {
    
            DELAY();
            spiSendAndGetData(spiREG2, &dataconfig_t, 6, send_data, recv_data);
            DELAY();
            DELAY();
        }

    我发现它仅根据 示波器发送第一个数据"0021"。

    另一个问题:

    我发现当发送一个字节时、它会将 CS 设置为高电平、就像图片一样

    您能帮我找到原因吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="431584" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1033570/tms570lc4357-spi-communication-problem-in-the-tmdx570lc43hdk-evaluation-board/3826424 #3826424"]根据 示波器、我发现它仅发送第一个数据"0021"。

    从屏幕截图中、我看到了24个时钟脉冲、这意味着传输3个字节的数据。

    [引用 userid="431584" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1033570/tms570lc4357-spi-communication-problem-in-the-tmdx570lc43hdk-evaluation-board/3826424 #3826424"]我发现当发送一个字节时,它会将 CS 设置为高电平,就像图片一样

    如果 CSHOLD 未置位、则 CS 在两次传输之间变为高电平。  

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

    您好、Wang

    我发现它仅根据 示波器发送第一个数据"0021"。

    从屏幕截图中、我看到了24个时钟脉冲、这意味着传输3个字节的数据。

    是的、它传输许多字节的数据、但传输相同的数据。 我希望它像程序一样传输6字节不同的数据。

    我发现当发送一个字节时、它会将 CS 设置为高电平、就像图片一样

    如果 CSHOLD 未置位、则 CS 在两次传输之间变为高电平。  

    我希望一次传输可以发送6个字节的数据、但它只发送1个字节的数据。 所以我认为 两次传输之间的间隔应该是8*6=48个 CLK。

    总之 、我希望通过 API "spiSendAndGetData"一次传输6字节数据。 当传输开始时、CS 为低电平、传输结束时、CS 为高电平。 您能告诉我如何实现或如何配置 HALCoGen 吗?

    非常感谢!