楼主: 所-长

[S32] S32K144 CAN 通信 不正常

[复制链接]

该用户从未签到

2

主题

24

帖子

5

新手上路

Rank: 1

积分
46
最后登录
2021-11-24
 楼主| 发表于 2018-5-22 10:31:55 | 显示全部楼层
所-长 发表于 2018-5-21 17:51
bool enableFD;               /*!< Enable flexible data rate */

这句话 神马意思啊 使能 自由速率 ? ...

的确 要配置成 false  谢谢亲
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

24

帖子

5

新手上路

Rank: 1

积分
46
最后登录
2021-11-24
 楼主| 发表于 2018-5-22 11:12:52 | 显示全部楼层
本帖最后由 所-长 于 2018-5-22 11:14 编辑

开始研究 手册:

截图 中的 第一个参数 : propagation segment,其实对应 手册寄存器Control 1 register (CTRL1)中的:PROPSEG(0-2)

原来手册中是这么讲的:

Propagation Segment
This 3-bit field defines the length of the Propagation Segment in the bit time. The valid programmable
values are 0–7. This field can be written only in Freeze mode because it is blocked by hardware in other
modes.
Propagation Segment Time = (PROPSEG + 1) × Time-Quanta.
Time-Quantum = one Sclock period.

传播时间段
这3 位定义了发送阶段位时间长度,有效值为0~7,该位只有在冻结模式
下才能被写入,在其他模式下该位被硬件锁定。
给出了计算公式,如下:
Propagation Segment Time = (PROPSEG + 1) × Time-Quanta.
Time-Quantum = one Sclock period.
这里 有三个 参数 暂时不知道 那个参数是确定的 ,因此继续往下分析!

回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

24

帖子

5

新手上路

Rank: 1

积分
46
最后登录
2021-11-24
 楼主| 发表于 2018-5-22 11:18:46 | 显示全部楼层
本帖最后由 所-长 于 2018-5-22 11:35 编辑

继续研究 手册:

截图 中的 第二个参数 : phase segment 1,其实对应 手册寄存器Control 1 register (CTRL1)中的:PSEG1(21-19)

原来手册中是这么讲的:

Phase Segment 1
This 3-bit field defines the length of Phase Segment 1 in the bit time. The valid programmable values are
0–7. This field can be written only in Freeze mode because it is blocked by hardware in other modes.
Phase Buffer Segment 1 = (PSEG1 + 1) × Time-Quanta.

相位段1。
该字段用来定义相位段1 位时间长度。有效值为0~7,该字段只能在冻结模
式下写入,在其他模式下该位被硬件锁定。

给出了计算公式,如下:
Phase Buffer Segment 1 = (PSEG1 + 1) × Time-Quanta.
这里 有三个 参数 暂时不知道 那个参数是确定的 ,因此继续往下分析!

总结:
这里和12楼 相比,有 相同的 参数 ,Time-Quanta,这个参数不知道怎么确定,后面再说!



回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

24

帖子

5

新手上路

Rank: 1

积分
46
最后登录
2021-11-24
 楼主| 发表于 2018-5-22 11:27:23 | 显示全部楼层
继续研究 手册:

截图 中的 第三个参数 : phase segment 2,其实对应 手册寄存器Control 1 register (CTRL1)中的:PSEG2(18-16)

原来手册中是这么讲的:

Phase Segment 2
This 3-bit field defines the length of Phase Segment 2 in the bit time. The valid programmable values are
0–7. This field can be written only in Freeze mode because it is blocked by hardware in other modes.
Phase Buffer Segment 2 = (PSEG2 + 1) × Time-Quanta.

相位段2。
该字段用来定义相位段2 位时间长度。有效值为0~7,该字段只能在冻结模
式下写入,在其他模式下该位被硬件锁定。

给出了计算公式,如下:
Phase Buffer Segment 2 = (PSEG2 + 1) × Time-Quanta.
这里 有三个 参数 暂时不知道 那个参数是确定的 ,因此继续往下分析!

总结:
这里和12楼 相比,也有 相同的 参数 ,Time-Quanta,这个参数不知道怎么确定,后面再说!
而且和13楼的 计算公式相同,这两个参数应该配置成一样的!
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

24

帖子

5

新手上路

Rank: 1

积分
46
最后登录
2021-11-24
 楼主| 发表于 2018-5-22 11:33:51 | 显示全部楼层
本帖最后由 所-长 于 2018-5-22 13:24 编辑

继续研究 手册:

截图 中的 第四个参数 :Prescaler Division Factor,其实对应 手册寄存器Control 1 register (CTRL1)中的:PRESDIV(31-24)

原来手册中是这么讲的:

Prescaler Division Factor
       This 8-bit field defines the ratio between the PE clock frequency and the Serial Clock (Sclock) frequency.
The Sclock period defines the time quantum of the CAN protocol. For the reset value, the Sclock
frequency is equal to the PE clock frequency. The Maximum value of this field is 0xFF, that gives a
minimum Sclock frequency equal to the PE clock frequency divided by 256. See Section "Protocol
Timing". This field can be written only in Freeze mode because it is blocked by hardware in other modes.
Sclock frequency = PE clock frequency / (PRESDIV + 1)

预分频器分频系数。
    这8 位用来定义PE 时钟频率与串行时钟频率(Sclock)之间的比率。
Sclock 周期定义了CAN 协议的最小时间份额,对于复位之后的值,Sclock 频率等于PE
的时钟频率。该寄存器的最大值为0xFF,位Sclock 的最小时钟频率,等于PE 时钟频率
除以256 的值。该字段只能在冻结模式下写入,在其他模式下该位被硬件锁定。

给出了计算公式,如下:
Sclock frequency = PE clock frequency / (PRESDIV + 1)
这里 有三个 参数 ,其中 PE clock frequency 是确定的,即 8M, 其中参数 PRESDIV  是我们配置寄存器的值,参数Sclock frequency 即串行时钟频率不知道怎么确定!



回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32035
    最后登录
    2024-4-26
    发表于 2018-5-22 13:07:05 | 显示全部楼层
    为认真钻研的精神赞一个!
    签到签到
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    24

    帖子

    5

    新手上路

    Rank: 1

    积分
    46
    最后登录
    2021-11-24
     楼主| 发表于 2018-5-22 13:09:40 | 显示全部楼层
    本帖最后由 所-长 于 2018-5-22 13:24 编辑

    继续研究 手册:

    截图 中的 第五个参数 :Resync Jump Width,其实对应 手册寄存器Control 1 register (CTRL1)中的:RJW(23-22)

    原来手册中是这么讲的:

    Resync Jump Width
    This 2-bit field defines the maximum number of time quanta that a bit time can be changed by one resynchronization.
    One time quantum is equal to the Sclock period. The valid programmable values are 0–
    3. This field can be written only in Freeze mode because it is blocked by hardware in other modes.
    Resync Jump Width = RJW + 1.

    再同步补偿位。
    这两位定义了在一次在同步过程中允许补偿误差的最大值。(1 个最小时
    间份额为Sclock 时钟周期)。有效值为0~3,该字段只能在冻结模式下写入,在其他模
    式下该位被硬件锁定。

    给出了计算公式,如下:
    Resync Jump Width = RJW + 1.
    这里 两个 参数 ,其中 Resync Jump Width 不确定, 其中参数 RJW 是我们配置寄存器的值。


    评分

    参与人数 1 +3 收起 理由
    doatello + 3 鼓励一下!加油!

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    24

    帖子

    5

    新手上路

    Rank: 1

    积分
    46
    最后登录
    2021-11-24
     楼主| 发表于 2018-5-22 13:10:26 | 显示全部楼层
    本帖最后由 所-长 于 2018-5-22 13:24 编辑
    NXP管管 发表于 2018-5-22 13:07
    为认真钻研的精神赞一个!

    有了您的鼓励 我 才能继续 下去
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    24

    帖子

    5

    新手上路

    Rank: 1

    积分
    46
    最后登录
    2021-11-24
     楼主| 发表于 2018-5-22 13:36:58 | 显示全部楼层
    本帖最后由 所-长 于 2018-5-22 13:39 编辑

    总结:
           1、通过上面分析,得出  Propagation Segment Time Time-Quanta 的值, 就可以 得出 寄存器 PROPSEG 的 值,即 我们在S32DS中 要配置的 propagation segment 的值。
           2、 Phase Buffer Segment 1 Time-Quanta 的值,就可以得出 寄存器 PSEG1的 值,即 我们在S32DS中 要配置的 Phase Segment 1 的值。
           3、Phase Buffer Segment 2 Time-Quanta 的值,就可以得出 寄存器 PSEG2的 值,即 我们在S32DS中 要配置的 Phase Segment 2 的值。
          4、Sclock frequency PE clock frequency(这个值已经确定是8M 的值,就可以得出 寄存器 PRESDIV 的 值,即 我们在S32DS中 要配置的 Prescaler Division Factor 的值。
          5、Resync Jump Width 的值确定就可以确定 寄存器 RJW 的值,即 我们在S32DS中 要配置的 Resync Jump Width 的值。


    那么问题来了,Propagation Segment Time Time-Quanta Phase Buffer Segment 1 Phase Buffer Segment 2  Sclock frequency  Resync Jump Width 和 要 配置的 Bitrate什么关系那?
    呼叫 小恩哥哥!!!
          
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    24

    帖子

    5

    新手上路

    Rank: 1

    积分
    46
    最后登录
    2021-11-24
     楼主| 发表于 2018-5-22 14:17:06 | 显示全部楼层
    本帖最后由 所-长 于 2018-5-22 14:20 编辑

    根据 官方 的 DEMO: Description: Simple CAN 2.0 transmit / receive at 500 K baud for S32K144.


    1、Propagation Segment Time / Time-Quanta = 7;           根据公式 Propagation Segment Time = (PROPSEG + 1) × Time-Quanta. 得出 PROPSEG  =6;
    2、Phase Buffer Segment 1 / Time-Quanta = 4;        
              根据公式Phase Buffer Segment 1 = (PSEG1 + 1) × Time-Quanta.得出 PSEG1 =3;
    3、Phase Buffer Segment 2 / Time-Quanta = 4;        
              根据公式Phase Buffer Segment 2 = (PSEG2 + 1) × Time-Quanta.得出 PSEG2 =3;
    4、Sclock frequency      =8;                                      
             根据公式Sclock frequency = PE clock frequency / (PRESDIV + 1) .得出 PRESDIV =0;
    5、Resync Jump Width =4;                                       
             根据公式Resync Jump Width = RJW + 1.得出 RJW=3;

    不知道这几个值 从何处 得来 ,这么算,要配置成 250K baud for S32K144,只需要 改 PRESDIV =1 即可,125K 的话,更改 PRESDIV =3 即可.





    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-28 07:16 , Processed in 0.151095 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表