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

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

相关推荐
Mr zhua4 天前
STM32G474VET6-CAN FD使用经典模式+过滤报文ID
stm32·can·tim
Ronin-Lotus5 天前
嵌入式硬件篇---CAN
单片机·嵌入式硬件·can·stm32f103rct6
weixin_419761149 天前
阿维塔汽车CAN总线数据适配技术解析与免破线数据采集实践
汽车·can·数据
不脱发的程序猿16 天前
如何使用CAN分析仪验证MCU CAN错误机制
嵌入式硬件·can
优信电子4 个月前
STM32F4分别驱动SN65HVD230和TJA1050进行CAN通信
stm32·单片机·嵌入式硬件·can·can 收发器·sn65hvd230·tja1050
黄金右肾4 个月前
STM32之CAN通讯(十一)
stm32·单片机·can·嵌入式软件
code .4 个月前
STM32G431收发CAN
单片机·嵌入式硬件·can·canfd·stm32g4
十六宿舍5 个月前
【AUTOSAR 基础软件】Can模块详解(Can栈之驱动模块)
网络·单片机·汽车·can·autosar·嵌入式开发·车载
嵌入式科普5 个月前
嵌入式科普(24)从SPI和CAN通信重新理解“全双工”
c语言·stm32·can·spi·全双工·ra6m5
Industio_触觉智能5 个月前
瑞芯微方案主板Linux修改系统串口波特率教程,触觉智能RK3562开发板演示
linux·开发板·串口调试·rk3562·波特率