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

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

相关推荐
赞哥哥s1 天前
Autosar Xcp配置-支持CANFD 64byte标定更改-基于ETAS软件
can·autosar·xcp
清轩轩3 天前
UDS时间参数学习(应用层+网络层+会话层+传输层)
c语言·can·信息与通信·诊断·uds
G果4 天前
Modbus CRC16 算法(举例)
can·modbus·ros2·crc16
一个平凡而乐于分享的小比特6 天前
I2C、SPI、CAN、串口通信详细对比
can·uart·spi·i2c
一个平凡而乐于分享的小比特8 天前
CAN通信协议详解:工业通信的“神经系统”
can·汽车电子·工业控制
江太翁12 天前
CAN 与 CAN FD
can
车载测试工程师13 天前
CAPL学习-ETH功能函数-概述
网络协议·can·以太网·capl·canoe
Makerbase_mks20 天前
CANable V2.5 Candlelight&Slcan 更新说明
can·can fd·canable·slcan·candlelight
斯内科23 天前
C#进行CAN【控制器局域网】通讯
c#·can·pcanbasic.net
Lenz's law2 个月前
智元灵犀X1-本体通讯架构分析2:CAN/FD总线性能优化分析
架构·机器人·can·1024程序员节