CANFD报文 位时间 理解

目录

  • [📙 位时间](#📙 位时间)
  • [📙 示波器截图示例](#📙 示波器截图示例)
  • [📙 PicoScope代码示例](#📙 PicoScope代码示例)

📙 位时间

如图,是一个CANFD总线的波特率配置,仲裁段速率为500Kbps,数据段为2000Kbps。

通过 公式 Bit Time = 1 / Baud Rate ,可以计算出每个Bit的时间,下表数值单位为纳秒

区段 理论值
仲裁段 2000ns
数据段 500ns

📙 示波器截图示例

如图,是一个CANFD总线的波特率配置,仲裁段速率为500Kbps,数据段为2000Kbps。

如下图, 报文0x19A是一帧CANFD格式报文,控制段(CTRL Field)中的FDF标志占一个bit,bit时间为1.997us (1997纳秒)。

数据段的data【0】,有9个bit(其中有一个bit是因为物理层如果出现5个相同电位后需要插入一bit反向电位),9个bit用时4.454us ,则平局一个bit用时595ns。

📙 PicoScope代码示例

如果使用PicoScope 测试CAN/CANFD总线的位时间,可以通过内置的testWaitScopeGetMessageBits函数实现


官网代码参考如下:

c 复制代码
dword arraySize = 200;
message 0x111 msg1;
long res;
long evtNo;
ScopeBitData data1[200];
ScopeBitData data2[200];
ScopeBitData data3[200];
ScopeAnalysisSetup setupAnalyse;

//------------------------------
//Connect to scope
//------------------------------
res = scopeConnect();
res = testWaitForScopeEvent(eScopeConnected, 8000);

if(res > 0)
{
  testStep("Wait For Event", "Waiting for Message 0x111");
  testJoinMessageEvent(msg1.id);
  evtNo = TestWaitForAnyJoinedEvent(2000);
  res = TestGetWaitEventMsgData(msg1);

  if(res != 0)
  {
    testStepFail("Wait For Event", "No event received");
    res = scopeDisconnect();
    res =testWaitForScopeEvent(eScopeDisconnected, 8000);
    return;
  }
  else
  {
    testStepPass("Wait For Event", "Event received");
  }

res = scopeTriggerNow();
if(res > 0)
  {
    res =(testWaitForScopeEvent(eScopeTriggered, 5000));

    if(res > 0)
    {
      setupAnalyse.samplePoint = 70;
      res = testWaitScopeGetMessageBits(msg1, setupAnalyse, arraySize, data1, data2, data3);

      if(res > 0 || res == -105)
      {
        int i;
        for(i = 0; i < arraySize;++i)
          {
            write("CANH: StarTime%.6f s, Type: %d, TypeExt: %d, BitLength: %d, Voltage: %.6f, BitValue: %d", data1[i].StartTime /1000000000., data1[i].type, data1[i].typeEx, data1[i].bitLength, data1[i].signalVoltage,data1[i].bitValue);
            write("CANL: StarTime%.6f s, Type: %d, TypeExt: %d, BitLength: %d, Voltage: %.6f, BitValue: %d", data2[i].StartTime /1000000000., data2[i].type, data2[i].typeEx, data2[i].bitLength, data2[i].signalVoltage,data2[i].bitValue);
            write("CANDiff: StarTime%.6f s, Type: %d, TypeExt: %d, BitLength: %d, Voltage: %.6f, BitValue: %d", data3[i].StartTime /1000000000., data3[i].type, data3[i].typeEx, data3[i].bitLength, data3[i].signalVoltage,data3[i].bitValue);
            if(i > 5) //write only first 5 results
            break; }
        }
      }
    }
  }
}
res = scopeDisconnect();
res =testWaitForScopeEvent(eScopeDisconnected, 8000);
  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

  • 🚩如果这篇博客对你有帮助,请 "点赞" "评论""收藏"一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。

相关推荐
赞哥哥s13 小时前
Autosar Com信号收不到排查-基于ETAS软件
can·autosar·com
SysMax2 天前
[开源机器人DCU模块]KunHong四路CANFD转EtherCAT
机器人·can·ethercat·关节电机
沪漂的码农2 天前
FlexCAN寄存器完全解读
stm32·单片机·嵌入式硬件·can
来可电子-CAN7 天前
告别“选择性采集”,精准定位新能源汽车售后故障——4路CANFD数据记录仪替代方案解析
汽车·can·汽车电子·工程机械·煤矿
爆爆带盐人10 天前
告别“选择性采集”,精准定位新能源汽车售后故障——4路CANFD数据记录仪替代方案解析
canfd·can记录仪·can数据记录仪·canfd接口卡
FPGA_小田老师10 天前
FPGA例程(6):UART串口通讯协议解析
fpga开发·串口通信·rs232·rs422·波特率·uart通信
不脱发的程序猿13 天前
CAN总线如何区分和识别帧类型
单片机·嵌入式硬件·嵌入式·can
智驾13 天前
【瑞萨RA x Zephyr评测】三、CAN模块测试
嵌入式·瑞萨·canfd·zephyr·renesas·ra6e2
hqwest15 天前
码上通QT实战14--监控页面06-串口设备数据初始化-
单片机·rs232·serialport·波特率·串口设备·虚拟串口设备软件·qt项目配置文件
BMS小旭1 个月前
CubeMx-CAN
单片机·学习·cubemx·can