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.

[参考译文] LAUNCHXL-F2800157:有关在 DCAN 闪存内核中将 CAN 比特率元数据字节设置为"C0 7A"的说明

Guru**** 2473260 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1476631/launchxl-f2800157-clarification-on-setting-can-bitrate-metadata-bytes-to-c0-7a-in-dcan-flash-kernel

器件型号:LAUNCHXL-F2800157

工具与软件:

您好!

我使用 LAUNHXL-F2800157 并按照《DCAN 闪存编程指南》配置 CAN 总线比特率。 该指南指示将生成的闪存内核文本文件中的字节3-4修改为"C0 7A"以设置所需的比特率。

我知道这些字节包含比特率配置的元数据、但我想详细说明导致特定值"C0 7A"的转换过程。 有人能说明一下这些值是如何推导出来的吗?

在背景下、我的 CAN 时钟(CANCLK)被设置为[例如、CANCLK] 20 MHz、我的目标比特率为[例如、100kbps]。

提前感谢您的帮助。

此致、
Taif

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

    给定值:

    ```μ A
    CAN_CALC_BITRATE = 1000000U
    CAN_CALC_CANCLK = 20000000U
    CAN_CALC_BITTIME = 20U
    CAN_CALC_TSYNC = 1U
    CAN_CALC_TPROP = 2U
    ```μ A

    1. CAN_CALC_BRP:
    ```μ A
    CAN_CALC_BRP = CAN_CALC_CANCLK /(CAN_CALC_BITRATE * CAN_CALC_BITTIME)
    假设:
    - CAN_CALC_CANCLK = 20000000
    - CAN_CALC_BITRATE = 1000000
    - CAN_CALC_BITTIME = 20
    计算:20000000 /(1000000 * 20)= 1
    ```μ A

    2. CAN_CALC_Tphase:
    ```μ A
    CAN_CALC_TPHASE = CAN_CALC_BITTIME -(CAN_CALC_TSYNC + CAN_CALC_TPROP)
    假设:
    - CAN_CALC_BITTIME = 20
    - CAN_CALC_TSYNC = 1
    - CAN_CALC_TPROP = 2.
    计算:20 -(1 + 2)= 17
    ```μ A

    3. CAN_CALC_PHSEG2:
    ```μ A
    CAN_CALC_PHSEG2 =((CAN_CALC_TPHASE/2U)<= 8U)? (CAN_CALC_TPHASE/2U):8u
    假设:
    - CAN_CALC_Tphase = 17 (从步骤2 )
    计算:(17/2 = 8.5)> 8、因此= 8
    ```μ A

    4. CAN_CALC_TSEG2:
    ```μ A
    CAN_CALC_TSEG2 = CAN_CALC_PHSEG2 - 1U
    假设:
    - CAN_CALC_PHSEG2 = 8 (从步骤3 )
    计算:8 - 1 = 7
    ```μ A

    5. CAN_CALC_PHSEG1:
    ```μ A
    CAN_CALC_PHSEG1 = CAN_CALC_TPHASE - CAN_CALC_PHSEG2
    假设:
    - CAN_CALC_Tphase = 17 (从步骤2 )
    - CAN_CALC_PHSEG2 = 8 (从步骤3 )
    计算:17 - 8 = 9
    ```μ A

    6. CAN_CALC_TSEG1:
    ```μ A
    CAN_CALC_TSEG1 =(CAN_CALC_PHSEG1 + CAN_CALC_TPROP)- 1U
    假设:
    - CAN_CALC_PHSEG1 = 9 (从步骤5)
    - CAN_CALC_TPROP = 2.
    计算:(9 + 2)- 1 = 10
    ```μ A

    7. CAN_CALC_TSJW:
    ```μ A
    CAN_CALC_TSJW =(CAN_CALC_PHSEG2 > 4U)? 4U : CAN_CALC_PHSEG2)- 1U
    假设:
    - CAN_CALC_PHSEG2 = 8 (从步骤3 )
    计算:(8 > 4、因此使用4)- 1 = 3
    ```μ A

    8. CAN_CALC_BRPEREG:
    ```μ A
    CAN_CALC_BRPEREG =(CAN_CALC_BRP - 1U)/64U
    假设:
    - CAN_CALC_BRP = 1 (从步骤1开始)
    计算:(1 - 1)/ 64 = 0
    ```μ A

    9. CAN_CALC_BRPREG:
    ```μ A
    CAN_CALC_BRPREG =(CAN_CALC_BRP - 1U)% 64U
    假设:
    - CAN_CALC_BRP = 1 (从步骤1开始)
    计算:(1 - 1)% 64 = 0
    ```μ A

    10.最终 CAN_CALC_BTRREG:
    ```μ A
    CAN_CALC_BTRREG =(CAN_CALC_BRPEREG<<16U)|(CAN_CALC_TSEG2<<12U)|(CAN_CALC_TSEG1<<8U)|(CAN_CALC_TSJW<<6U)| CAN_CALC_BRPREG
    假设:
    - CAN_CALC_BRPEREG = 0 (从步骤8开始)
    - CAN_CALC_TSEG2 = 7 (从步骤4开始)
    - CAN_CALC_TSEG1 = 10 (从步骤6开始)
    - CAN_CALC_TSJW = 3 (来自步骤7)
    - CAN_CALC_BRPREG = 0 (从步骤9开始)
    计算:(0<<16)|(7<<12)|(10<<8)|(3<<6)| 0 = 0x7AC0
    ```μ A

    最终结果:CAN_CALC_BTRREG = 0x7AC0