国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術SJA1000的CAN通訊接口函數介紹

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-01-14 15:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

英創ARM9系列嵌入式主板一大特色就是提供了CAN接口,并實現了相應的驅動程序,用戶只需直接調用CAN_API函數即可實現CAN數據報文的通訊操作。目前EM9000以及EM9X60系列板卡所提供的CAN接口均是采用的是SJA1000 CAN總線控制器,SJA1000是一款獨立的控制器,主要用于汽車和一般工業環境中的控制器局域網絡(CAN)芯片。CAN通訊接口可提供高達1Mbps的數據傳輸速率,當采用5Kbps的的數據傳輸速率時其通訊距離最高可達到10KM。硬件的錯誤檢定特性也增強了CAN的抗電磁干擾能力,這給數據的遠程可靠傳輸提供了有利保證。

硬件上來說,英創提供的CAN通訊接口根據用戶的需要分為兩種:一種帶光電隔離,一種不帶光電隔離。帶光電隔離CAN總線通訊模塊的CAN收發器端的所有信號電源與其它部分完全隔離,可承受至少1Kv(有效值)的電壓沖擊。

軟件上英創出廠的帶有CAN通訊接口的ARM9板卡均帶有相應的驅動,基于WinCE系統配置了標準的WinCE流式驅動程序,基于Linux系統是將CAN接口配置為字符設備驅動程序。CAN通訊的數據收發均采用的中斷方式,驅動程序中已自動完成了數據的收發,以及內部定義的CAN接收緩沖區和發送緩沖區的管理。

接收緩沖區

發送緩沖區

WinCE

64k

4k

Linux

64k

4k

為了方便用戶的使用,在CAN驅動程序的基礎上為客戶封裝了一套簡單實用的API函數。各個函數的定義在can_api.h文件下,在該頭文件中對于各個API函數均有相應的中文說明。本文將詳細介紹各個接口函數的使用。

1、CAN接口API函數定義
英創公司提供的CAN通訊接口的驅動程序采用標準的驅動程序,用戶可以用標準的打開文件、關閉文件的方式,來打開該CAN設備。相關的一些函數定義如下:

/*
* 功能描述:設置CAN控制芯片為操作模式。
* 輸入參數:
* fd: CAN設備文件描述符
* 返回值:
* 0: 成功
* <0: 失敗
*/

int CAN_StartChip( int fd );

/*
* 功能描述:設置CAN控制芯片為復位模式。
* 輸入參數:
* fd: CAN設備文件描述符
* 返回值:
* 0: 成功
* <0: 失敗
*/

int CAN_StopChip( int fd );

/*
* 功能描述:設置CAN通訊的波特率
* 輸入參數:
* fd: CAN設備文件描述符
* Baud: 枚舉變量,分別對應不同的波特率
* CAN_BAUDRATE_10K = 0: 10Kbps
* CAN_BAUDRATE_20K = 1: 20Kbps
* CAN_BAUDRATE_50K = 2: 50Kbps
* CAN_BAUDRATE_100K = 3: 100Kbps
* CAN_BAUDRATE_125K = 4: 125Kbps
* CAN_BAUDRATE_250K = 5: 250Kbps
* CAN_BAUDRATE_500K = 6: 500Kbps
* CAN_BAUDRATE_1000K = 7: 1Mbps
* CAN_BAUDRATE_60K = 8: 60Kbps
* 返回值:
* 0: 成功
* <0: 失敗
*/

int CAN_SetBaudRate( int fd , CAN_BAUDRATE Baud );

/*
* 功能描述:設置CAN通訊驗收濾波器配置
* 輸入參數:
* fd: CAN設備文件描述符
* *AcceptanceFilter: 驗收濾波器結構指針
* struct accept_filter
* {
* unsigned int accept_code;
* unsigned int accept_mask;
* unsigned char filter_mode;
* };
* accept_code: 濾波器接收碼
* accept_mask: 濾波器屏蔽碼
* filter_mode: 0-雙濾波器 1-單濾波器
*
* 返回值:
* 0: 成功
* <0: 失敗
*/

int CAN_SetGlobalAcceptanceFilter( int fd , accept_filter *AcceptanceFilter );

/*
* 功能描述:用于啟動或關閉CAN自檢測模式
* 輸入參數:
* fd: CAN設備文件描述符
* Mode: 1-啟動自檢測模式
* 0-關閉自檢測模式,返回正常模式
* 返回值:
* 0: 成功
* <0: 失敗
*/

int CAN_SelfTest( int fd , int Mode );

/*
* 功能描述:獲取CAN通訊時的錯誤編碼
* 輸入參數:
* fd: CAN設備文件描述符
* 輸出參數:
* *ErrorPtr:錯誤編碼
* 返回值:
* 0: 成功
* <0: 失敗
*/

int CAN_GetError( int fd , DWORD *ErrorPtr);

/*
* 功能描述:獲取CAN通訊中相關統計數據以及CAN控制芯片的狀態寄存器
* 輸入參數:
* fd: CAN設備文件描述符
* 輸出參數:
* *DriverStatistics:得到相應統計結構數據
* 返回值:
* 0: 成功
* <0: 失敗
*/

int CAN_GetCANDriverStatistics( int fd , drv_statistics *DriverStatistics );

在can_api.h中還定義了一個CAN驅動的統計數據結構struct DRIVERSTATISTICS,這個結構中記錄了CAN通訊的一些統計參數,包括CAN中斷次數,CAN數據幀發送成功統計次數等等。這些參數可通過API函數中CAN_GetCANDriverStatistics來獲取,這些參數可以作為分析CAN通訊的狀態的一個重要參考。以下為這些參數的定義。

typedef struct
{
DWORD NumISTEvents; // CAN中斷事件統計次數
DWORD NumRxDataFrameInt; // CAN數據幀接收中斷統計次數
DWORD NumRxDataFramePutRing; // CAN接收數據幀放入接收環形數據
// BUF的統計次數
DWORD NumTxDataFramePutRing; // CAN發送數據幀放入發送環形數據
// BUF的統計次數
DWORD NumTxDataFrameInt; // CAN數據幀發送中斷統計次數
DWORD NumTxSuccessful; // CAN數據幀發送成功統計次數
DWORD NumTxFailed; // CAN數據幀發送失敗統計次數
DWORD NumErrorWarningInt; // CAN通訊錯誤報警中斷的統計次數
DWORD NumErrorWarningLevel; // CAN通訊出錯的統計次數,錯誤指至
// 少一個錯誤計數器滿或由錯誤報警限
// 制寄存器(EWLR)定義的CPU報警
// 限制

DWORD NumErrorPassive; // CAN通訊中錯誤消極中斷的統計次數
DWORD NumErrorBusOff; // CAN通訊錯誤中總線關閉錯誤的統計次數
DWORD NumSwitchedToNormalOperation; // CAN通訊中錯誤狀態切換到正常
// 狀態(總線開啟)的統計次數
DWORD NumOverrunInt; // CAN通訊中數據溢出中斷的統計次數
DWORD NumBusErrorInt; // CAN通訊中數據BUSOFF錯誤中斷的統計次數
DWORD NumArbitrationLostInt; // CAN通訊中仲裁丟失中斷的統計次數
DWORD MaxNumMsgsInRing; // CAN通訊中接收數據幀的數目
DWORD RXErrorCounter; // 讀取CAN通訊芯片中RX錯誤計數器的值
DWORD TXErrorCounter; // 讀取CAN通訊芯片中TX錯誤計數器的值
DWORD Status; // 讀取CAN通訊芯片中狀態寄存器的值
}DRIVERSTATISTICS;

2、CAN數據的接收和發送
在WinCE下,作為流式接口函數通常和文件系統的API函數(如CreateFile)緊密匹配的,因此在使用英創提供的CAN接口的API函數時,首先需要調用CreateFile(…)來獲取CAN接口設備的句柄handle,如使用CAN1通訊口,可以調用以下函數:
m_hCAN=CreateFile(_T(“CAN1:”), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

在Linux下,調用的方式如下:

m_fd=open('/dev/em9x60_can1',O_RDWR | O_NOBLOCK );

在創建CAN設備得到有效的handle之后,就可以調用can_api.h中定義的相應函數來啟動CAN設備接口。

BOOL CAN_StartChip (HANDLE hDevice);

在進行CAN數據通訊之前,需要設置和CAN通訊相關的一些參數,包括CAN通訊的波特率設置以及對接收過濾器的設置。

BOOL CAN_SetBaudRate(HANDLE hDevice, BYTE *index);

用于設置CAN通訊的波特率,波特率的設置范圍包括:10kbps~1Mbps。具體的定義請參見can_api.h文件中的注釋說明。

通過配置接收過濾器,CAN通訊接口可以實現只接收標識符也接收過濾器預設值相一致的報文。接收過濾器由接收碼寄存器ACRn和接收屏蔽碼寄存器AMRn來定義的,還可以選擇兩種不同的過濾器模式,單過濾器模式或者雙過濾器模式。關于ACR、AMR中各位的定義,請參見SJA1000的數據手冊,這里就不再贅述。在英創提供的API函數中,用戶可以調用以下函數來實現接收過濾器的設置:
BOOL CAN_SetGlobalAcceptanceFilter( HANDLE hDevice, BYTE *AcceptanceFilter, BYTE size)

對于CAN通訊數據接收線程可以采用兩種方式:一種可以采用定時查詢,即定時調用函數CAN_GetNextReceivedFrame( …)檢測是否有接收到CAN報文數據;一種可以利用操作系統的消息機制,采用事件響應的方式,一旦硬件接收的數據報文,底層的驅動接收程序會自動讀取報文,同時發送一個接收事件。作為應用程序的接收線程在等待到該事件后,調用CAN_GetNextReceivedFrame(…)即可進行CAN數據報文的讀取。需要注意的是函數CAN_GetNextReceivedFrame每執行一次,只是讀取了一幀CAN數據報文,如果在應用程序中需要將最新的數據全部讀出,只需反復調用該函數,直到該函數的返回值為FALSE。

接收線程部分代碼:

DWORD CEM9000_CAN::ReadThreadFunc( LPVOID lparam )
{
CEM9000_CAN *ceCAN = (CEM9000_CAN*)lparam;
BOOL bResult;
while( 1 )
{
if(WaitForSingleObject(ceCAN->m_hReadCloseEvent,0 )==WAIT_OBJECT_0 )
{
break;
}
// 等待接收事件觸發,使用以下代碼
WaitForSingleObject( ceCAN->m_hRxEvent, INFINITE );
// 若采用定時查詢,則調用Sleep(..)即可,Sleep的時間由應用程序確定
// Sleep( 50 );


ceCAN->m_nRxCounter = 0;
for( ; ; )
{
// 讀取已接收的所有數據幀
bResult=CAN_GetNextReceivedFrame(ceCAN->m_hCAN,&ceCAN->RxMFrame[ceCAN->m_nRxCounter] );
if( !bResult )
{
break;
}
ceCAN->m_nRxCounter++;
}
if(ceCAN->m_nRxCounter>0 )
{
// 調用回調函數,進行必要的數據處理
ceCAN->OnRead( ceCAN->m_pCANOwner );
}
}
return 0;
}

CAN數據報文的發送比較簡單,應用程序直接調用函數CAN_SendFrame(…)即可,該函數的功能只是將需要發送的數據填入驅動的發送數據緩沖區,真正的數據發送是由驅動程序中的發送線程自動完成的。若用戶需要查看數據是否發送成功,可以通過檢查驅動的相關統計數據DriversStatistics來判斷,其中NumTxSuccessful為CAN數據幀成功發送統計數,每成功發送一次CAN數據幀,該計數值自動加1。

3、CAN通訊的出錯處理
在can_api.h文件對于CAN通訊所返回的錯誤代碼分別定義如下:

錯誤代碼

定義

CANCONTROLLER_NORMAL 表明CAN通訊工作正常
CANCONTROLLER_WARNING_LIMIT_REACHED 表明出錯,至少接收或發送錯誤計數器中的一個已達到或超過了由錯誤報警寄存器(EWLR)定義的報警限,缺省為96
CANCONTROLLER_ERROR_PASSIVE 表明SJA1000達到錯誤消極狀態,也就是說至少一個錯誤計數器超過規定值127
CANCONTROLLER_BUS_OFF 表明該接口脫離總線
CANCONTROLLER_OVERRUN 數據溢出錯誤
RING_BUFFER_FULL 表明接收或發送緩沖區滿

錯誤代碼可通過API函數CAN_GetError(HANDLE hDevice, DWORD *ErrorPtr)來獲取。一般來說出現前面兩個錯誤:CANCONTROLLER_WARNING_LIMIT_REACHED和CANCONTROLLER_ERROR_PASSIVE,CAN通訊口還可恢復,一旦CAN接口成功接收或發送一幀數據,CAN接口又可回到正常工作狀態。而對于出現其余的三項錯誤,我們建議在應用程序最好是做復位CAN接口的操作,即通過函數調用先關閉CAN口然后再重新初始化該接口。

在英創公司提供的應用光盤中有具體CAN接口的測試代碼,可供客戶參考測試。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    88

    文章

    11758

    瀏覽量

    219008
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6107

    瀏覽量

    37071
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    卡塔爾通訊信息技術部與Ooredoo電信公司一行來訪達實智能開展培訓

    2026年1月7日至8日,卡塔爾通訊信息技術部(MCIT)以及卡塔爾Ooredoo電信公司一行來訪達實智能開展培訓。達實智能董事長劉磅、副總裁易鴻、海灣區域經理海樂姆(阿拉伯籍)等陪同接待。
    的頭像 發表于 01-09 16:03 ?717次閱讀

    龍芯中科成功舉辦2025信息技術應用創新產教融合交流會

    11月30日,在教育部教育管理信息中心、山東省電化教育館的支持和指導下,龍芯中科聯合浪潮集團、濟南幼兒師范高等專科學校(以下簡稱“濟南幼高專”),成功舉辦信息技術應用創新產教融合交流會,并同步舉行信息技術應用創新實踐基地啟用儀式
    的頭像 發表于 12-08 14:53 ?776次閱讀

    PXB-6020(D):讓CAN通訊更靈活,Modbus接入更簡單

    在現代工業和儲能系統中,CAN通訊接口數量有限,常常限制了系統的擴展和設備接入。如何在不增加成本的情況下,實現更多設備的靈活接入?本文將介紹一款高效、可靠的解決方案,輕松解決
    的頭像 發表于 11-27 11:38 ?290次閱讀
    PXB-6020(D):讓<b class='flag-5'>CAN</b><b class='flag-5'>通訊</b>更靈活,Modbus接入更簡單

    龍芯中科助力2025教育信息技術應用創新大賽成功舉辦

    2025年11月13日-15日,由中國教育技術協會主辦、浙江大學與中國教育技術協會網絡安全專業委員會聯合承辦,中國電子工業標準化技術協會信息技術應用創新工作委員會、浙江高校信
    的頭像 發表于 11-21 16:23 ?784次閱讀

    誠邁科技信電腦助力2025第二屆教育信息技術應用創新大賽圓滿收官

    11月15日,由中國教育技術協會主辦、浙江大學與中國教育技術協會網絡安全專業委員會聯合承辦,中國電子工業標準化技術協會信息技術應用創新工作委員會、浙江高校信
    的頭像 發表于 11-17 17:58 ?671次閱讀
    誠邁科技信<b class='flag-5'>創</b>電腦助力2025第二屆教育<b class='flag-5'>信息技術</b>應用創新大賽圓滿收官

    寶馬南京信息技術有限公司開業

    今日,寶馬(南京)信息技術有限公司在南京正式“掛牌運行”。這家華晨寶馬全資子公司由領悅數字信息技術有限公司南京分公司“迭代”而來,代表著一次里程碑式的“進化”。這次升級不僅加速了寶馬在華數字化轉型進程,更通過深化本土創新,為“未來智慧出行”的發展譜寫了核心“代碼”。
    的頭像 發表于 10-29 15:17 ?616次閱讀

    CAN 接口的“老炮”本色:ARMxy BL410 工業通訊全攻略

    深圳市鋇錸技術有限公司ARMxy系列BL410控制器,內置工業級CAN接口,支持多節點廣播、強抗干擾與高實時性,適用于儲能系統BMS、AGV、變頻器組網等復雜環境。配合RS485、LAN等多
    的頭像 發表于 08-12 09:35 ?807次閱讀

    易華錄入選國家級信息技術應用創新典型解決方案

    近日,工業和信息化部網絡安全產業發展中心(工業和信息化部信息中心)公布了“2024年信息技術應用創新解決方案”評選結果。易華錄申報的“基于節能高效藍光的超級智能存儲解決方案”憑借顯著的
    的頭像 發表于 08-07 15:35 ?1613次閱讀

    信息技術應用產學協同人才培養行動計劃”正式發布,誠邁科技入選首批參與單位

    設在中國軟件評測中心。誠邁科技作為信技術先鋒企業,受邀成為首批參與單位,與國內頂尖高校、領軍企業和權威機構攜手,共同打造具有中國特色的信息技術人才培養新范式,為
    的頭像 發表于 08-06 17:29 ?1547次閱讀
    “<b class='flag-5'>信息技術</b>應用產學協同人才培養行動計劃”正式發布,誠邁科技入選首批參與單位

    佛瑞亞如何通過信息技術推動業務增長

    在數字化、信息化的浪潮下,信息技術已經不僅是后臺工具,更成為驅動企業發展的關鍵力量。本期Women Inspiring Mobility,我們采訪了佛瑞亞中國區信息技術總監馬瑛,了解她和團隊如何將
    的頭像 發表于 07-29 14:00 ?900次閱讀

    飛騰主板為信產業發展提高硬實力

    信息技術飛速發展的當下,信產業已成為我國實現科技自立自強、保障國家信息安全的關鍵領域。信,即信息技術應用創新,其核心目標是實現
    的頭像 發表于 07-22 18:20 ?707次閱讀

    DEKRA德凱成為沙特通信和信息技術設備技術法規認證機構

    近日,DEKRA德凱成功獲得沙特標準、計量和質量組織(SASO)認可,正式成為沙特通信和信息技術設備技術法規(Technical Regulation for Communications
    的頭像 發表于 07-15 14:27 ?917次閱讀

    科普|信是什么?一文讀懂“信息技術應用創新”戰略

    什么是信?信,即“信息技術應用創新”,是國家推動IT系統自主可控、安全可控的重要戰略工程。它不僅是技術層面的創新,更承載著保障國家網絡安全、推動產業升級和實現數字主權的重任。簡單來
    的頭像 發表于 06-13 10:06 ?8199次閱讀
    科普|信<b class='flag-5'>創</b>是什么?一文讀懂“<b class='flag-5'>信息技術</b>應用創新”戰略

    2025第二屆教育信息技術應用創新大賽正式開賽

    為進一步落實建設網絡強國和教育強國的戰略部署,推動各級教育行政部門及高校信息技術應用創新能力提升,培養實戰型創新人才。龍芯中科聯合太初元碁、誠邁科技在2025第二屆教育信息技術應用創新大賽共同發布信息技術應用創新人工智能方向(賽
    的頭像 發表于 05-13 16:21 ?1435次閱讀

    上海雷卯提供1KV的CAN浪涌方案 CAN接口浪涌損壞測試

    CAN接口
    上海雷卯電子
    發布于 :2025年03月07日 19:13:43