片。
[0095] 由于中標(biāo)麒麟操作系統(tǒng)下UART總線的通信速率最高支持到115200bps,而CAN總 線最高速率可達(dá)lM/s,故CAN總線傳輸來的數(shù)據(jù)可能無法完全通過UART總線傳輸出去,這 樣會使得UART總線傳輸?shù)臄?shù)據(jù)發(fā)生錯(cuò)誤。解決該問題,可以設(shè)置CAN總線在收發(fā)數(shù)據(jù)時(shí), 保證幀與幀之間有一定的時(shí)間間隔,以確保每幀數(shù)據(jù)收發(fā)的正確性。另外,在一種可能的實(shí) 現(xiàn)方式中,在所述A1之前,還包括:設(shè)置UART的緩沖區(qū);
[0096] 所述A1包括:將所述CAN總線接收的所述CAN協(xié)議幀添加到所述UART的緩沖區(qū) 中,從所述UART的緩沖區(qū)中獲取所述CAN協(xié)議幀,將獲取的CAN協(xié)議幀發(fā)送通過CAN總線 發(fā)送給所述第二芯片。
[0097] 通過緩沖區(qū)將CAN總線接收的CAN協(xié)議幀緩存,從緩沖區(qū)中獲取數(shù)據(jù)進(jìn)行后續(xù)處 理,避免了由于傳輸速率不同而引發(fā)的數(shù)據(jù)傳輸錯(cuò)誤。
[0098] 在一種可能的實(shí)現(xiàn)方式中,在所述A2中,所述通過所述第二芯片將所述CAN協(xié)議 幀轉(zhuǎn)換為UART總線數(shù)據(jù),包括:從所述CAN協(xié)議幀中提取數(shù)據(jù)位,將所述數(shù)據(jù)位轉(zhuǎn)換為所述 UATR總線數(shù)據(jù)。由于CAN協(xié)議幀中攜帶的數(shù)據(jù)存儲在數(shù)據(jù)位中,因此將數(shù)據(jù)位中的數(shù)據(jù)提 取出來進(jìn)行轉(zhuǎn)換即可。
[0099] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖及具體實(shí)施例對本 發(fā)明作進(jìn)一步地詳細(xì)描述。
[0100] 在本發(fā)明實(shí)施例中,主機(jī)的系統(tǒng)為中標(biāo)麒麟操作系統(tǒng),該系統(tǒng)不支持CAN總線,支 持USB總線。
[0101] 如圖4所示,本發(fā)明實(shí)施例提供了一種CAN總線通信的方法,該方法可以包括以下 步驟:
[0102] 步驟401 :在主機(jī)的USB總線上掛載用于USB總線與UART總線轉(zhuǎn)換的第一芯片, 在所述主機(jī)中配置用于UART總線與CAN總線轉(zhuǎn)換的第二芯片,設(shè)置UART的緩沖區(qū)。
[0103] 具體地,由于該系統(tǒng)的內(nèi)核為Linux2. 6. 25以上版本,系統(tǒng)中集成了cp210x的 驅(qū)動,能夠?qū)P2102芯片進(jìn)行驅(qū)動,第一芯片可以是:SILICONLABS的CP2102芯片;第 二芯片可以是:Nuvoton的NUC230LE3AE芯片,在NUC230LE3AE芯片中還包括:主控模塊和 TJA1040CAN收發(fā)器,主控模塊用于UART總線數(shù)據(jù)與CAN數(shù)據(jù)幀的轉(zhuǎn)換,TJA1040CAN收發(fā)器 用于CAN數(shù)據(jù)的接收和發(fā)送。
[0104] 步驟402 :通過CAN總線接收外部發(fā)來的CAN協(xié)議幀,將所述CAN總線接收的所述 CAN協(xié)議幀添加到所述UART的緩沖區(qū)中,從所述UART的緩沖區(qū)中獲取所述CAN協(xié)議幀,將 獲取的CAN協(xié)議幀發(fā)送通過CAN總線發(fā)送給所述第二芯片。
[0105] 步驟403 :通過所述第二芯片從所述CAN協(xié)議幀中提取數(shù)據(jù)位,將所述數(shù)據(jù)位轉(zhuǎn)換 為所述UATR總線數(shù)據(jù),通過UART總線將所述UART總線數(shù)據(jù)發(fā)送給所述第一芯片。
[0106] 步驟404:通過所述第一芯片將所述UART總線數(shù)據(jù)轉(zhuǎn)換為USB總線數(shù)據(jù),在USB總 線上傳輸所述USB總線數(shù)據(jù)。
[0107] 可以主機(jī)可以通過USB總線獲取上述的USB總線數(shù)據(jù),通過該實(shí)施例提供的方法, 用戶可以通過CAN總線向主機(jī)傳輸數(shù)據(jù),主機(jī)也可以將CAN總線接收的數(shù)據(jù)以USB總線數(shù) 據(jù)的形式獲取。
[0108]參見圖5,本發(fā)明實(shí)施例提供了一種CAN總線通信的裝置,包括:
[0109] 第一配置單元501,用于在主機(jī)的USB總線上掛載用于USB總線與UART總線轉(zhuǎn)換 的第一芯片,在所述主機(jī)中配置用于UART總線與CAN總線轉(zhuǎn)換的第二芯片;
[0110] 第一USB總線傳輸單元502,用于通過USB總線將待傳輸數(shù)據(jù)發(fā)送給所述第一芯 片;
[0111] 第一UART總線傳輸單元503,用于通過所述第一芯片將所述待傳輸數(shù)據(jù)轉(zhuǎn)換為 UART總線數(shù)據(jù),通過UART總線將所述UART總線數(shù)據(jù)發(fā)送給所述第二芯片;
[0112] 第一CAN總線傳輸單元504,用于通過所述第二芯片將所述UART總線數(shù)據(jù)轉(zhuǎn)換為 CAN協(xié)議幀,將所述CAN協(xié)議幀通過所述CAN總線傳輸。
[0113] 在一種可能的實(shí)現(xiàn)方式中,該裝置還包括:第一UART總線配置單元,用于識別所 述第一芯片,生成所述第一芯片對應(yīng)的/dev/ttyUSBO文件,接收第一配置命令,根據(jù)所述 第一配置命令,對所述/dev/ttyUSBO文件進(jìn)行修改,實(shí)現(xiàn)對所述UART總線的通信速率、流 控方式、數(shù)據(jù)位、停止位、校驗(yàn)位的配置。
[0114] 在一種可能的實(shí)現(xiàn)方式中,該裝置還包括:第一CAN總線配置單元,用于接收第二 配置命令,根據(jù)所述第二配置命令,打開CAN總線中用于傳輸數(shù)據(jù)的CAN通道。
[0115] 所述第一CAN總線傳輸單元504,在執(zhí)行所述將所述CAN協(xié)議幀通過所述CAN總線 傳輸時(shí),具體執(zhí)行:將所述CAN協(xié)議幀在CAN總線的打開的CAN通道上傳輸。
[0116] 在一種可能的實(shí)現(xiàn)方式中,所述第一CAN總線傳輸單元504,在執(zhí)行所述通過所述 第二芯片將所述UART總線數(shù)據(jù)轉(zhuǎn)換為CAN協(xié)議幀時(shí),具體執(zhí)行:將待傳輸數(shù)據(jù)以8位為一 幀,在幀頭處添加幀識別碼、通道識別碼、幀類別及格式碼、幀ID,在幀尾添加對數(shù)據(jù)位的校 驗(yàn)和,生成所述CAN協(xié)議幀。
[0117]參見圖6,本發(fā)明實(shí)施例提供了一種CAN總線通信的裝置,包括:
[0118] 第二配置單元601,用于在主機(jī)的USB總線上掛載用于USB總線與UART總線轉(zhuǎn)換 的第一芯片,在所述主機(jī)中配置用于UART總線與CAN總線轉(zhuǎn)換的第二芯片;
[0119] 第二CAN總線傳輸單元602,用于通過CAN總線接收外部發(fā)來的CAN協(xié)議幀,并通 過CAN總線將所述CAN協(xié)議幀發(fā)送給所述第二芯片;
[0120] 第二UART總線傳輸單元603,用于通過所述第二芯片將所述CAN協(xié)議幀轉(zhuǎn)換為 UART總線數(shù)據(jù),通過UART總線將所述UART總線數(shù)據(jù)發(fā)送給所述第一芯片;
[0121] 第二USB總線傳輸單元604,用于通過所述第一芯片將所述UART總線數(shù)據(jù)轉(zhuǎn)換為 USB總線數(shù)據(jù),在USB總線上傳輸所述USB總線數(shù)據(jù)。
[0122] 在一種可能的實(shí)現(xiàn)方式中,該裝置,還包括:
[0123]第二UART總線配置單元,用于識別所述第一芯片,生成所述第一芯片對應(yīng)的/dev/ttyUSBO文件,接收第一配置命令,根據(jù)所述第一配置命令,對所述/dev/ttyUSBO文件 進(jìn)行修改,實(shí)現(xiàn)對所述UART總線的通信速率、流控方式、數(shù)據(jù)位、停止位、校驗(yàn)位的配置。
[0124] 在一種可能的實(shí)現(xiàn)方式中,該裝置,還包括:第二CAN總線配置單元,用于接收第 二配置命令,根據(jù)所述第二配置命令,打開CAN總線中用于傳輸數(shù)據(jù)的CAN通道;
[0125]所述第二CAN總線傳輸單元602,用于通過CAN總線的所述CAN通道接收外部發(fā)來 的CAN協(xié)議幀,并通過CAN總線的CAN通道將所述CAN協(xié)議幀發(fā)送給所述第二芯片。
[0126]在一種可能的實(shí)現(xiàn)方式中,該裝置還包括:設(shè)置單元,用于設(shè)置UART的緩沖區(qū);
[0127]所述第二CAN總線傳輸單元602,用于將所述CAN總線接收的所述CAN協(xié)議幀添加 到所述UART的緩沖區(qū)中,從所述UART的緩沖區(qū)中獲取所述CAN協(xié)議幀,將獲取的CAN協(xié)議 幀發(fā)送通過CAN總線發(fā)送給所述第二芯片。
[0128] 在一種可能的實(shí)現(xiàn)方式中,所述第二UART總線傳輸單元,在執(zhí)行所述通過所述第 二芯片將所述CAN協(xié)議幀轉(zhuǎn)換為UART總線數(shù)據(jù)時(shí),具體執(zhí)行:從所述CAN協(xié)議幀中提取數(shù) 據(jù)位,將所述數(shù)據(jù)位轉(zhuǎn)換為所述UATR總線數(shù)據(jù)。
[0129] 上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實(shí)施 例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實(shí)施例中的敘述,此處不再贅述。
[0130] 本發(fā)明實(shí)施例提供了一種CAN總線通信的方法及裝置,具有如下有益效果:
[0131] 1、在本發(fā)明實(shí)施例提供的一種CAN總線通信的方法及裝置中,在主機(jī)上分別設(shè)置 第一芯片和第二芯片,通過第一芯片將待傳輸數(shù)據(jù)轉(zhuǎn)換為UART總線數(shù)據(jù),將UART總線數(shù)據(jù) 通過第二芯片轉(zhuǎn)換為CAN數(shù)據(jù)幀,將CAN數(shù)據(jù)幀在CAN總線中傳輸,實(shí)現(xiàn)CAN總線的數(shù)據(jù)通 信,該實(shí)施例提供的方法及裝置中