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.

[参考译文] CCS/TDA3XEVM:CAN#39;t 读取 SPI 模块的芯片选择值

Guru**** 2601915 points
Other Parts Discussed in Thread: TDA3XEVM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/649744/ccs-tda3xevm-can-t-read-chip-select-value-for-the-spi-module

器件型号:TDA3XEVM

工具/软件:Code Composer Studio

您好!

我使用的是 tda3xx EVM。 我已经将 tda3xevm 设置为从器件、并在 SPI 事务中创建了一个定制 PC 应用作为主器件。 虽然所有数据都正确传输(从器件(tda3xevm)和 PC 之间的通信没有任何问题)、但我需要读取芯片选择信号的值来处理一些异常情况(理论上)。 我在手册中看到用于读取片选的寄存器是 MCSPI_SYST (0x48098124)。 因此、我正在读取 与 SPIEn_0相对应的值(我正在使用通道0)、但它看起来始终相同。 如何正确读取 CS 信号的值?

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

    您好、Theodoros、

    您如何读取该值? 我是说 CCS 读取、devmem、还是在 C 代码中? 您读取的值是0还是1?

    此致、

    STAN

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

    您好、Stan、

    我使用 SBL 的 c 代码进行测量(修改后支持此 SPI 通信、并在 SPI 事务完成后引导)。我获得的值始终为0、 当我轮询该寄存器时、我还使用示波器测量芯片选择引脚上的实际电压 (电压信号是正常的、即需要时需要高电压或低电压电平)。即使我测量示波器上的高电压、我提到的寄存器也将始终返回0。

    BR、

    Theodore

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

    Theodore、

    看起来我们没有阅读小字体:)

    请参阅 TRM 中的寄存器说明:

    "该寄存器用于检查系统内部与外设之间互连的正确性

    模块配置为系统测试(SYSTEST)模式时、总线或从外部连接到器件 I/O 焊盘。"

    SYSTEST 是使用以下寄存器中的位字段输入的:MCSPI_MODULCTRL。

    看起来不允许在任务模式下读取/修改 CS 和其他引脚。

    此致、

    STAN

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    理论上、您可以将 CS 引脚多路复用为 GPIO、读取 GPIO 引脚值、然后再多路复用为 SPI CS。 但是、我不知道这将(IF)如何影响 SPI 事务。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Stan、

    感谢您的回答、我想我无法用 pinmux 的变化来实现这一技巧、因为 SPI 事务处理非常密集、这可能会导致数据损坏(因为我需要在 SPI 事务中执行此操作)。 您能详细介绍一下系统测试模式吗? 我尝试将其用于我的系统、但这会导致一些错误、我是否可以使用此系统测试模式。 我在 TRM 中没有找到太多信息、因此我要问您。

    提前感谢、
    Theodore
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是我从内部规范中发现的内容、它也没有太多的说明、但在我看来、无论如何也没有其他可说的了。

    "MCSPI_MODULCTRL 寄存器的 System_Test 位被置位时、McSPI 处于系统测试模式(SYSTEST)。
    SYSTEST 模式用于以非常简单的方式检查系统互连内部到中断处理程序、电源管理器或外部到 SPI I/O 的正确性。
    通过切换输出并捕捉输入的逻辑状态、可在 SYSTEST 模式下执行 I/O 验证。 (请参阅 MCSPI_SYST 寄存器定义"

    我想您应该将 system_test 位置1以进入测试模式。 然后、您可以监控 MCSPI_SYST 中的相关值。 在系统测试模式下、您将无法执行 SPI 数据传输。 要再次进入功能模式、我认为软件复位和完全重新初始化应该会使 MCSPI 进入工作状态。

    您是否尝试将 system_test 设置为1?

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

    我想您现在回答了我的所有问题、但只是为了清楚地总结所有问题。
    1)当处于 SYSTEST 模式时、我无法进行任何 SPI 事务。
    2)轮询芯片选择值的唯一方法是通过 MCSPI_SYST

    如果之前的2个事实是正确的、那么在 SPI 传输期间我无法实际轮询芯片选择值。
    您能确认吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 1)正确
    2) 2)在 MSPI 中-是。 也可以通过 GPIO (独立于 MCSPI):
    -如果 MCSPI 是您设置中唯一的从器件,您可以在3引脚模式下运行它(CS 在此时无关)。 CS 可在内部多路复用为 GPIO、并从该 GPIO 进行监控。 3引脚模式可通过 MCSPI_MODULCTRL[1] PIN34进行选择
    -如果无法实现3引脚、并且您的 PCB 设计尚未最终确定、您也可以将 CS 路由到相邻的 GPIO 引脚。 您可以从此处监控 CS。

    此致、
    STAN