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

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

相关推荐
来可电子-CAN4 天前
USBCANFD卡再汽车电子行业中得应用
汽车·can·工程机械·特种车辆·煤矿
Zevalin爱灰灰1 个月前
CANoe/CANalyzer基础教程 第五章(CAPL语言)
汽车·can·canoe
LabVIEW开发1 个月前
LabVIEW与CANopen实现自动化生产线的设备控制与数据采集
can·labview·labview开发
CharGer.2 个月前
通信协议_C#实现CAN通信
c#·网络编程·can
江安吴彦祖2 个月前
工业控制:CANOpen(控制器局域网络)协议快速学习
单片机·物联网·汽车·can·canopen
鹿屿二向箔2 个月前
在CANopen协议中,SDO的意思
can
劉小帅2 个月前
CANoe的capl调用Qt制作的dll
qt·can
劉小帅3 个月前
CAN和CANFD数据写入.asc文件的dll
qt·自动化·can
嵌入式小宁3 个月前
ESP32 双线汽车接口 (TWAI)
汽车·can·twai