CH372驅(qū)動程序
CH372 芯片在本地端提供了通用的被動并行接口。CH372 芯片的讀寫時序主要要求讀寫使能信號有一個2~10ms的持續(xù)時間,并且在a0=1時寫入命令,a0=0時讀寫數(shù)據(jù)。在本設(shè)計中,用LPC2119的IO口來表示CH372的各信號,并需要嚴(yán)格按照其時序要求用軟件模擬其讀寫時序,一個典型的寫數(shù)據(jù)子函數(shù)如下:
USBWriteData(uint32 Data)
{
………………………
IO0CLR=0x00000010; //a0=0,表示以下
寫入為數(shù)據(jù)
IO0PIN=Data; //向數(shù)據(jù)端口寫入數(shù)據(jù)
IO0SET=0x00000020; //rd=1,讀信號無效
IO0CLR=0x00000040; //wr=0,寫使能
Delay8us(1); //延時8us,表示寫信號
有效寬度
IO0SET=0x00000060;
…………………………
}
在以上程序中,對各端口的操作先后代表了CH372的讀寫時序信號的先后,適當(dāng)?shù)难訒r表示有效的寫/讀選通脈沖WR/RD的寬度,其典型值為90到10000ns,我們選擇25ms。同理可得寫命令,讀數(shù)據(jù)子函數(shù):USBWriteCMD (uint32 CMD),USBReadData( )。調(diào)用以上子函數(shù)提供了發(fā)送和接收數(shù)據(jù)的函數(shù): IRQ_CH372(void), UploadUSBData(unint32 Length,uint32 Data[])。
環(huán)形緩沖區(qū)
在本設(shè)計中,設(shè)計了兩個環(huán)形緩沖區(qū),分別存放USB及CAN的數(shù)據(jù),使其能同步發(fā)送,一個典型的緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)如下:
struct CANRecRinBuf
{
Uint32 CANBuf[MAX];
Uint32 WritePtr;
Uint32 ReadPtr;
}
數(shù)據(jù)元素是無符號32位整數(shù),MAX為環(huán)形緩沖區(qū)最大長度,WritePtr為讀指針,ReadPtr為寫指針。讀寫指針初始化為WritePtr = ReadPtr =0。通過CAN控制器接受的數(shù)據(jù)存放在環(huán)形緩沖區(qū)CANRecRinBuf中,再讀出數(shù)據(jù)從USB端輸出,保證了數(shù)據(jù)通信的可靠性。
上位機監(jiān)控界面
安裝CH372的上位機驅(qū)動后,基于CH372的USB設(shè)備就可以被上位機識別了。調(diào)用CH372提供的動態(tài)連接庫CH372.dll及其相應(yīng)的LIB文件CH372.Lib和頭文件CH372.h,以建立上位機的工序,調(diào)用CH372提供的庫函數(shù)CH375OpenDevice()、CH375CloseDevice(),用于打開和關(guān)閉設(shè)備,調(diào)用CH375WriteData(); CH375ReadData()接收下位機通過CH372發(fā)送上來的數(shù)據(jù),并根據(jù)CAN總線數(shù)據(jù)的格式將其封裝成CAN格式的數(shù)據(jù),提供對CAN數(shù)據(jù)的收發(fā)CANDownload(),CANUpload()。用C++設(shè)計相應(yīng)的圖形界面以實現(xiàn)和下位機的通信。
結(jié)語
在ABS ECU的研發(fā)項目中,我們使用了此轉(zhuǎn)換器將ECU的CAN數(shù)據(jù)轉(zhuǎn)換成USB數(shù)據(jù)和上位機通信,ECU上傳需監(jiān)控參數(shù),上位機下傳標(biāo)定參數(shù)。其硬件上使用ARM7內(nèi)核的LPC2119作為控制器,以及底層軟件的設(shè)計確保了轉(zhuǎn)換器在實際的ECU開發(fā)的CCP標(biāo)定的工程中,在大量數(shù)據(jù)進行傳輸?shù)倪^程中有較好的可靠性。
電子發(fā)燒友App









評論