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、他们遇到了 GPIO1在运行一段时间后将生成一个40MHz 波形、该波形恰好是其外部晶体的频率的问题。
我有客户回读了 工作模式和引脚配置寄存器(地址= h0800)、
发现当40MHz 显示在波形中时、GPIO1_CONFIG 更改为1。(绿色为写入值)
因此、我想确认的是、如果该位设置为1、是否意味着它会配置为时钟输出、正如我在旧版数据表中看到的、它具有多路复用器。 (虽然从数据表更改中可以看到我们将其删除、但我仍然想知道、这是裸片更改、或只是数据表更改)
我只需确认发生这种情况的原因:
首先、我检查了 SPI 配置、它是模式0。
然后、我发现他们将使用 TI 演示代码的函数 Init_can (void)重新初始化 TCAN4550。 (www.ti.com/.../SLLC469)
在调用 Init_can(void)之前,他们会向 TCAN4550发送一个 RST 信号,我检查他们会将高电平设置为2ms ,而在消耗低电平之后,他们会再等待2ms。
因此 我让客户注释这个 Init_can (void)代码、然后问题消失了、或者由于我们没有进行这么长时间的测试、更难重现。
你有什么想法,为什么该位被改变?
Br
爱玛
尊敬的 Emma:
客户只应使用 GPIO1_CONFIG 值"00"或"10" GPIO1_CONFIG 寄存器值0x01和0x11保留且不应使用。 某些保留寄存器位仅供未使用、而其他寄存器位可用于内部或开发功能、而不打算在客户的应用中使用。
因此 我让客户注释这个 Init_can (void)代码、然后问题消失了、或者由于我们没有进行这么长时间的测试、更难重现。
你有什么想法,为什么该位被改变?
[/报价]Init_can (void)函数是演示代码中的主函数、用于配置 TCAN4550的所有器件设置。 我认为、如果您注释掉整个函数、那么该器件将无法进行配置或工作。
Init_can (void)函数中的以下代码行会设置 GPIO1_CONFIG 寄存器值。
devConfig。 GPIO1_CONFIG = TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG_GPO; // GPIO 设置为 GPO (默认)
此行是如下所示 devConfig 设置的一部分、以供参考。
Fullscreen1234567891011121314151617/* Configure the TCAN4550 Non-CAN-related functions */TCAN4x5x_DEV_CONFIG devConfig = {0}; // Remember to initialize to 0, or you'll get random garbage!devConfig.SWE_DIS = 0; // Keep Sleep Wake Error Enabled (it's a disable bit, not an enable)devConfig.DEVICE_RESET = 0; // Not requesting a software resetdevConfig.WD_EN = 0; // Watchdog disableddevConfig.nWKRQ_CONFIG = 0; // Mirror INH function (default)devConfig.INH_DIS = 0; // INH enabled (default)devConfig.GPIO1_GPO_CONFIG = TCAN4x5x_DEV_CONFIG_GPO1_MCAN_INT1; // MCAN nINT 1 (default)devConfig.FAIL_SAFE_EN = 0; // Failsafe disabled (default)devConfig.GPIO1_CONFIG = TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG_GPO; // GPIO set as GPO (Default)devConfig.WD_ACTION = TCAN4x5x_DEV_CONFIG_WDT_ACTION_nINT; // Watchdog set an interrupt (default)devConfig.WD_BIT_RESET = 0; // Don't reset the watchdogdevConfig.nWKRQ_VOLTAGE = 0; // Set nWKRQ to internal voltage rail (default)devConfig.GPO2_CONFIG = TCAN4x5x_DEV_CONFIG_GPO2_NO_ACTION; // GPO2 has no behavior (default)devConfig.CLK_REF = 1; // Input crystal is a 40 MHz crystal (default)devConfig.WAKE_CONFIG = TCAN4x5x_DEV_CONFIG_WAKE_BOTH_EDGES;// Wake pin can be triggered by either edge (default)TCAN4x5x_Device_Configure(&devConfig); // Configure the device with the above configurationXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/* Configure the TCAN4550 Non-CAN-related functions */ TCAN4x5x_DEV_CONFIG devConfig = {0}; // Remember to initialize to 0, or you'll get random garbage! devConfig.SWE_DIS = 0; // Keep Sleep Wake Error Enabled (it's a disable bit, not an enable) devConfig.DEVICE_RESET = 0; // Not requesting a software reset devConfig.WD_EN = 0; // Watchdog disabled devConfig.nWKRQ_CONFIG = 0; // Mirror INH function (default) devConfig.INH_DIS = 0; // INH enabled (default) devConfig.GPIO1_GPO_CONFIG = TCAN4x5x_DEV_CONFIG_GPO1_MCAN_INT1; // MCAN nINT 1 (default) devConfig.FAIL_SAFE_EN = 0; // Failsafe disabled (default) devConfig.GPIO1_CONFIG = TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG_GPO; // GPIO set as GPO (Default) devConfig.WD_ACTION = TCAN4x5x_DEV_CONFIG_WDT_ACTION_nINT; // Watchdog set an interrupt (default) devConfig.WD_BIT_RESET = 0; // Don't reset the watchdog devConfig.nWKRQ_VOLTAGE = 0; // Set nWKRQ to internal voltage rail (default) devConfig.GPO2_CONFIG = TCAN4x5x_DEV_CONFIG_GPO2_NO_ACTION; // GPO2 has no behavior (default) devConfig.CLK_REF = 1; // Input crystal is a 40 MHz crystal (default) devConfig.WAKE_CONFIG = TCAN4x5x_DEV_CONFIG_WAKE_BOTH_EDGES;// Wake pin can be triggered by either edge (default) TCAN4x5x_Device_Configure(&devConfig); // Configure the device with the above configuration为 TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG_GPO enum 包括在 TCAN4x5x_TCANL.h Data_Structs 文件中。 该代码仅提供未保留的寄存器设置作为选项。
Fullscreen12345typedef enum{TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG_GPO = 0,TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG_WATCHDOG_INPUT = 2} TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXtypedef enum { TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG_GPO = 0, TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG_WATCHDOG_INPUT = 2 } TCAN4x5x_DEV_CONFIG_GPIO1_CONFIG;客户能否验证他们的代码是否将该寄存器值设置为0 (默认值)、或者如果他们正在使用看门狗功能、则设置为2? 不应将其设置为1或3、因为它们是保留的。
我不知道此位设置会自行更改的任何原因。 有噪声或质量较差的 SPI 信号可能会导致错误地对 SPI 位进行采样、但这可能不是非常可重复的、并且也会损坏其他寄存器值。
此致、
乔纳森