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);
  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

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

相关推荐
国科安芯4 天前
在轨服务与空间机器人任务中跨飞行器CANFD互连的共模与单粒子问题综述
嵌入式硬件·机器人·canfd·低轨卫星·商业航天·抗辐射
国科安芯4 天前
商业深空与地月空间长周期任务CANFD接口器件的总剂量选型综述——基于ASM1042S2S电离总剂量与单粒子试验证据链
canfd·卫星·商业航天·抗辐射
WWJA王文举4 天前
CAN 通信协议详解:从硬件接线、帧格式到仲裁机制、Bus-Off 与工程调试
can·嵌入式开发·通信协议
国科安芯5 天前
重复使用运载火箭回收段CANFD通信链路的可靠性研究综述
电源模块·canfd·卫星·商业航天·运载火箭
endeavor126 天前
can总线(五)
c语言·stm32·单片机·can
endeavor126 天前
CAN总线
stm32·单片机·can
CodeQingqing8 天前
Zcanpro + candbc 调试 can 设备
can·dbc·zcanpro·汽车can
明如正午8 天前
用 Python 一键把 ASC 文件转成 BLF(基于 python-can)
python·can·blf·asc
iCxhust13 天前
CAN信号电平与485信号电平实测
单片机·can·通讯·rs485
来可小闵儿1 个月前
CAN数据记录仪在机场特种车(地面保障设备)上的应用
can·记录仪