can bit time 计算

can bit time 计算

问:CAN 控制器驱动开发时,位时间应该如何配置?
答:根据 CAN 协议,有Tq = BRP / Fsys。(BRP = Baud Rate Prescaler,Fsys = MCU system Clock)。下面将这个公式展开,引入一个实际的问题来进行一个简单的计算。
Q:设现有一控制器,其输入时钟频率为 40MHz,需 500kbps 波特率,4分频,80%采样点,求位时间各段具体配置情况。
A:根据上面我们拿到的信息逐条分析,与上述的计算方式对照,我们可以得到以下结论:
      Fsys == 40MHz========>Fcan = 40MHz / 4 = 10MHz========>Time Quanta = 1 / Fcan = 100ns
      BaudRate == 500kbps==========> Bit Time == 1 / 500kbps = 2us
      根据以上得出的信息可知:Number Of Tq = Bit Time / Time Quanta =  2us / 100ns = 20(个)========>Tsync + TSEG1 + TSEG2 = 20
      80%采样点========>(Tsync + TSEG1) / (Tsync + TSEG1 + TSEG2) = 80%(Tsync 恒为 1个Tq)
      (1 + TSEG1)/ 20 = 80%========>TSEG1 = 16 - 1 = 15
      TSEG2 = Number Of Tq - TSEG1 - Tsync = 20 - 15 - 1 = 4
PS:根据 CAN 协议,可编程的 Tq 各时间段的配置是有明确要求的,详情见下表,如有超出酌情调整BRP值。

      
    • Related Articles

    • IDE 使用:System time wrong! License invalid!

      Q:IDE使用提示:System time wrong! License invalid!? 方式一: 将 ide 目录下的 timeinfo 文件删除。 删除timeinfo文件 方法二: 删除.realevoide 配置文件夹,该文件在 Windows 用户组的隐藏文件夹中 删除.realevoide文件夹 参考文章:IDE 注册:System time wrong! License invaild!
    • IDE 注册:System time wrong! License invaild!

      问:IDE 注册时提示系统时间错误 “System time wrong! License invaild!”,如下图所示: 在 IDE 安装时,由于 license 需要在线注册,会对安装机器的时间与网络时间(北京时间)做检测比对,当差距较大时无法完成成功注册。此时可以通过网络同步或者手动修改安装 IDE 目标机器的日期和时间,然后重新注册即可完成注册正常使用。 参考文章:IDE 使用:System time wrong! License invalid!
    • SylixOS 协议栈学习(三)ICMP 处理

           ICMP(Internet control message protocol)是网络控制报文协议,用于在IP主机跟路由器之间传输控制信息的。 控制信息指网络不通、主机是否可达、路由是否有用等。  之前在将ip4_input时,涉及到三次ICMP的东西:         1、在转发过程中,如果TTL变为0,则要用icmp_time_exceeded函数向源主机发送一份超时ICMP信息。         2、会通过ip报头,判断是否是ICMP报文,如果是,则调用icmp_input函数。 ...
    • SylixOS x86 HPET 定时器驱动

      HPET(High Precision Event Timer) 俗称高精度定时器,最低时钟频率为10MHZ,而且定义了比较严格的精确度(间隔 >= 1 毫秒的允许 +-0.05% 的误差,间隔 <=100 微妙的允许 +-0.2% 的误差)。x86 架构中一般支持 HPET 定时器。在 HPET 体系结构中规定 32 个定时器组成一个定时器块,最多可支持 8 个块,也就是 256 个定时器。实际设备中可使用的定时器数量可以从相关寄存器中查询。每个定时器均可以单独配置成一个中断。 在 x86 ...
    • GCC浮点相关的编译选项配置

      gcc的浮点相关编译选项配置 GCC 中的浮点相关的编译选项属于依赖于不同平台的配置选项, 本文的相关配置都是在 ARM32 平台下. SylixOS 下常用的浮点编译配置有两个 -mfpu=name, -mfloat-abi=name 测试程序 #include <stdio.h> #include <time.h> float calc(float *src_mem_32, float *dst_mem_32) {    float mem_32;    int i, j;    for ...