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.

[参考译文] TCAN4550-Q1:写入控制寄存器时出现问题

Guru**** 2465890 points


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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1477376/tcan4550-q1-problems-writing-to-control-register

器件型号:TCAN4550-Q1

工具与软件:

您好、我的问题与该锁定线程相同: https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1353491/tcan4550-q1-problems-writing-to-control-register?tisearch=e2e-sitesearch

我已验证可以使用暂存区寄存器和字节序测试寄存器进行读取和写入。  TCAN4x5x_TCAN(Can4x5x_TX1) Device_Set 函数也看起来工作正常

我正在使用演示驱动程序中的 TCAN4x5x_MCAN_EnableProtectedRegisters ()函数。 初始读取为0x19。 然后它会写入0x03 (仅限 CCCR_INIT 和 CCCR_CCE)。 该函数每次都会失败、每次读取 CCCR 寄存器时、其值均为0x19。 我在此函数之前已添加各种延迟、并已将重试次数设置为高达200、并且结果相同。

在上述主题中、 Eric Schott 说"可能会尝试解锁受保护的寄存器、从而使 MCAN 在请求期间处于繁忙状态"。 有人可以详细说明吗?

谢谢!

-Mike

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

    尊敬的 Mike:

    在上述主题中、 Eric Schott 说、"在请求期间、尝试解锁受保护的寄存器可能会失败、MCAN 正忙。" 有人可以详细说明吗?

    我不确定、但 Eric 可能指的是待处理的消息传输、如果有消息传输、则这些操作将在器件进入初始化状态之前完成。

    当 INIT 位在 SPI 相关错误之外已经等于1时、我不能想到无法设置 CCE 位的原因。  您可以读取状态(0x000C)和中断(0x0820)寄存器吗?

    我知道您刚才说过暂存区寄存器似乎可以访问、但您是否能够监视逻辑分析仪或示波器上的4个 SPI 信号(NCS、SCLK、SDO 和 SDI)?  如果可以、我可以检查它们是否存在与协议或时序相关的可能错误。

    此致、

    Jonathan

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

    状态为0x08、表示"内部多传输模式访问正在进行"。

    INTERRUTS 寄存器读取0x100000、指示"上电"。

    这可以告诉您什么吗?

    我可以运行一个逻辑分析仪、但并不容易。 我想先看看其他方面。 我认为 SPI 工作正常。 我对读数非常有信心,但我必须交换字节序以使它们正常工作。 尽管暂存区 测试成功、但我还不确定写入的情况。

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

    尊敬的 Mike:

    可以尝试在没有逻辑分析仪的情况下工作。

    状态寄存器值0x08是正常值、位3只是一个只读状态位、表示器件中正在进行内部访问、这与正常运行的器件是通用的。  这不表示存在任何类型的故障。  该寄存器中的其他位将指示 SPI 通信的某种形式的错误。

    为了清楚起见、SPI 接口使用 FIFO 来处理 SPI 时钟和通过 OSC1/2引脚提供的内核时钟之间的时钟域频率边界。  该器件将监控 SCLK 转换的数量、以确保有准确数量的移入和移出 FIFO 的位、并标记此寄存器中的任何相关错误以及中断寄存器0x0820中的 SPIERR 位。

    我很想了解您的 SPI 写入函数中是否检测到 SPI 错误、因为该器件应该会丢弃这些写入事务并保留先前的寄存器数据、以防止其被生成错误的 SPI 事务中产生的"潜在损坏"数据所取代。  这正是我认为无法向控制寄存器的 CCE 位写入新值的原因之一。

    您能够清除中断寄存器中的 PWRON 位吗?  例如、通过对寄存器进行读操作(查看 PWRON 位是否置位)、向该寄存器位写1、然后读回该寄存器以查看其是否已清除或任何新位是否置位(例如 SPIERR 位)。  理想情况下、PWRON 位将清零、并且在这个过程中不会置位 SPIERR 位。

    如果正常工作、则 SPI 可能会正常工作。  您还可以尝试向 MRAM 存储器写入和读取数据(从地址0x8000开始)。  如果所有功能均可正常工作、则 CCE 位问题可能不是 SPI 问题。

    此致、

    Jonathan

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

    我尝试将 0x100000和 0x00写入中断(0x0820) 寄存器、在这两种情况下、 我读回0x100000时它没有改变。 此后、STATUS 寄存器仍为0x08。

    我正在使用 TCAN SPI 驱动器中的 TCAN_SPI_WRITE_32 -我使用与成功修改暂存区相同的函数。

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

    尊敬的 Mike:

    通过向寄存器中的那个位写入1来清除 PWRON 位应该也不会遇到问题。  

    您是否可以向除暂存区寄存器之外的任何寄存器写入和读回新值?  例如、您是否可以尝试写入运行模式和引脚配置寄存器(0x0800)中的某些位?

    您使用的是 TI 的评估板之一、还是您自己设计的板?

    此致、

    Jonathan

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

    非常尴尬-我假设写入是正确的、因为我使用字节对称寄存器进行了测试... (0x55555555)。 现在,我已经纠正了读和写的字节序,一切工作!!! 感谢您的参与、为我在这里犯的愚蠢错误深表歉意。

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

    尊敬的 Mike:

    不用担心,我很高兴我可以帮助和听到一切现在工作!  

    此致、

    Jonathan