- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉
目录
- [📙 位时间](#📙 位时间)
- [📙 示波器截图示例](#📙 示波器截图示例)
- [📙 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);
🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
🚩如果这篇博客对你有帮助,请 "点赞" "评论""收藏"一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。