本文聚焦Air780EPM的CAN通信能力,結(jié)合LuatOS實時操作系統(tǒng),從底層驅(qū)動到應用層協(xié)議,詳細拆解如何實現(xiàn)工業(yè)級CAN總線數(shù)據(jù)傳輸,助力開發(fā)者快速落地項目。
最新資料詳見:https://docs.openluat.com/air780epm/luatos/api/core/can/
一、Can操作庫常量定義
1.1 CAN工作模式常量
can.MODE_NORMAL:
正常工作模式;
can.MODE_LISTEN:
監(jiān)聽模式(僅接收,不發(fā)送);
can.MODE_TEST:
自測模式(自收自發(fā));
can.MODE_SLEEP:
休眠模式。
1.2 CAN狀態(tài)常量
can.STATE_STOP:
停止工作狀態(tài);
主動錯誤狀態(tài)(一般情況下為該狀態(tài));
can.STATE_PASSIVE:
被動錯誤狀態(tài)(總線上錯誤較多時進入,但仍可正常收發(fā));
can.STATE_BUSOFF:
離線狀態(tài)(總線錯誤非常多,不能收發(fā),需手動退出);
can.STATE_LISTEN:
監(jiān)聽狀態(tài)(選擇監(jiān)聽模式時進入);
can.STATE_TEST:
自收自發(fā)狀態(tài)(選擇自測模式時進入);
can.STATE_SLEEP:
休眠狀態(tài)(選擇休眠模式時進入)。
1.3 回調(diào)消息類型常量
can.CB_MSG:
有新數(shù)據(jù)寫入緩存;
can.CB_TX:
數(shù)據(jù)發(fā)送完成(需通過param判斷成功/失敗);
can.CB_ERR:
錯誤報告(param為錯誤碼);
can.CB_STATE:
總線狀態(tài)變更,后續(xù)param參數(shù)是新的狀態(tài),也可以用can.state讀出。
1.4 幀格式常量
can.EXT:擴展幀;
can.STD:標準幀。
二、Can操作庫API函數(shù)
2.1 初始化與配置
1)初始化CAN總線
can.init(id, rx_message_cache_max)
參數(shù):
id:總線ID(0表示can0,1表示can1,通常默認為0)。
rx_message_cache_max:接收緩存消息數(shù)最大值(默認使用平臺值)。
返回值:boolean(成功返回true,失敗返回false)。
示例:
2)配置CAN總線的波特率及時序參數(shù)
can.timing(id, br, PTS, PBS1, PBS2, SJW)
參數(shù):
id:總線ID。
br:波特率(默認1Mbps)。
PTS:
傳播時間段(范圍1~8,默認5)。
PBS1:
相位緩沖段1(范圍1~8,默認4)。
PBS2:
相位緩沖段2(范圍2~8,默認3)。
SJW:
同步補償寬度(范圍1~4,默認2)。
返回值:boolean。
示例:
3)設置CAN總線工作模式
can.mode(id, mode)
參數(shù):
id:總線ID。
mode:
模式常量(如 can.MODE_NORMAL)。
返回值:boolean。
示例:
4)設置消息過濾規(guī)則
can.filter(id, dual_mode, ACR, AMR)
參數(shù):
id:總線ID。
dual_mode:是否啟用雙濾波模式。
ACR:接受代碼寄存器(過濾 ID 值)。
AMR:接受掩碼寄存器(掩碼值)。
返回值:boolean。
注意:具體實現(xiàn)依賴硬件特性。
5)設置CAN節(jié)點ID及類型can.node(id, node_id, id_type)
參數(shù):
id:總線ID。
node_id:節(jié)點 ID。
id_type:ID 類型(can.EXT或can.STD)。
返回值:boolean。
示例:
2.2 數(shù)據(jù)與收發(fā)
1)發(fā)送CAN消息
can.tx(id, msg_id, id_type, RTR, need_ack, data)
參數(shù):
id:總線ID。
msg_id:消息ID。
id_type:
幀類型(can.EXT 或 can.STD)。
RTR:
是否為遠程傳輸請求(true/false)。
need_ack:
是否需要應答(true/false)。
data:
數(shù)據(jù)(數(shù)組,如 {0x01, 0x02})。
返回值:無。
示例:
2)接收CAN消息
can.rx(id)
參數(shù):id:總線ID。
返回值:消息數(shù)據(jù)(如 {id=0x123, data={0x01, 0x02}})。
示例:
2.3 狀態(tài)與事件
1)注冊事件回調(diào)函數(shù)
can.on(id, func)
參數(shù):
id:總線ID。
func:回調(diào)函數(shù)(參數(shù):id, type, param)。
示例:
2)獲取當前總線狀態(tài)
can.state(id)
參數(shù):id:總線ID。
返回值:狀態(tài)常量(如 can.STATE_ACTIVE)。
3)停止指定總線can.stop(id)
參數(shù):id:總線ID。
4)重置總線(恢復默認配置)can.reset(id)
參數(shù):id:總線ID。
5)反初始化總線can.deinit(id)
參數(shù):id:總線ID。
6)啟用/禁用調(diào)試信息輸出can.debug(on_off)
參數(shù):on_off(布爾值)。
三、CAN開發(fā)相關注意事項
3.1 初始化順序
3.2 消息發(fā)送與接收
使用can.tx發(fā)送消息,確保參數(shù)正確;通過can.rx拉取消息,或在回調(diào)中處理can.CB_MSG。
3.3 狀態(tài)監(jiān)控
定期檢查can.state,處理離線狀態(tài)(can.STATE_BUSOFF);錯誤回調(diào)can.CB_ERR,需記錄param錯誤碼。
3.4 調(diào)試與性能
啟用can.debug(true) 輸出底層日志;接收緩存rx_message_cache_max需根據(jù)需求調(diào)整,避免消息丟失。
3.5 常見問題
如何解決can.STATE_BUSOFF離線狀態(tài)?
需先調(diào)用can.reset(id)恢復總線,再重新初始化配置。
如何確保消息發(fā)送成功?
通過can.CB_TX回調(diào)判斷發(fā)送結(jié)果,或檢查返回值(若API支持)。
如何處理高頻率消息接收?
增大rx_message_cache_max,或在回調(diào)中及時處理消息。
更多最新開發(fā)資料詳見:www.air780epm.cn
今天的內(nèi)容就分享到這里了~
審核編輯 黃宇
-
CAN通信
+關注
關注
5文章
97瀏覽量
18411 -
總線通信
+關注
關注
0文章
60瀏覽量
12032 -
LuatOS
+關注
關注
0文章
101瀏覽量
2234
發(fā)布評論請先 登錄
Air8101多網(wǎng)融合戰(zhàn)略升級:Air780EPM模塊助力4G聯(lián)網(wǎng)落地

優(yōu)化你的設計:Air780EPM場景化ADC硬件電路指南!

Air780EPM — ADC硬件電路設計:場景化優(yōu)化與實踐!

解鎖Air780EPM:N種GPIO操控LED的實戰(zhàn)技巧!

如何解決Air780EPM開發(fā)中的調(diào)試難題?深度解析高效調(diào)試方法

大公開!用Air780EPM重構(gòu)水質(zhì)COD監(jiān)測,替代STM32+4G模組的技術路徑

血淚教訓總結(jié):Air780EPM的LuatOS二次開發(fā)——OneWire協(xié)議調(diào)試注意事項

新手必看!4G模組Air780EPM——GPIO的設計說明

干貨預警!4G模組:Air780EPM其他硬件接口

手把手教你!4G模組Air780EPM——GPIO的設計說明

快速上手!4G模組Air780EPM的供電設計以及選型推薦

Air780EPM 模塊串口電路設計硬件指導

4G模組Air780EPM的開機啟動及外圍電路設計!

初學者必看!4G模組Air780EPM的開機啟動及外圍電路設計

解析Air780E模組LuatOS開發(fā)的隨機數(shù)(random) 示例篇

評論