基于CY7C646xx的通用串行總線接口
該應(yīng)用采用Keil51編譯環(huán)境,用C語(yǔ)言完成固件源代碼的編寫(xiě)。采用標(biāo)準(zhǔn)的結(jié)構(gòu)框架,修改或者添加自己的代碼,完成所需要的任務(wù)。
需要注意,如果開(kāi)發(fā)者沒(méi)有使用片外接存儲(chǔ)器,需將Keil51編譯環(huán)境的L51 Location選項(xiàng)中的Code(指令碼部分)始于0x0080,而且xdata(數(shù)據(jù)部分)始于0xl000,以保證在同一個(gè)RAM中指令代碼和數(shù)據(jù)不混迭。
6 計(jì)算機(jī)端應(yīng)用程序的編寫(xiě)
應(yīng)用程序與設(shè)備進(jìn)行通信的通用函數(shù)包括打開(kāi)關(guān)閉設(shè)備、傳輸數(shù)據(jù)等:
6.1 打開(kāi)和關(guān)閉設(shè)備
該應(yīng)用程序基于Ezusb.sys驅(qū)動(dòng)程序,利用VisualC++針對(duì)該電路進(jìn)行操作,完成數(shù)據(jù)的傳輸。
打開(kāi)設(shè)備: HANDLE hDevice=CreateFile (DeviceName,
GENERIC_WRITEIGENERIC_READ,F(xiàn)ILE_SHARE_WRITE︱FILE_SHARE_READ,
NULL,OPEN_EXISTING,0,NULL);
程序打開(kāi)設(shè)備"DeviceName''的方式為通用讀寫(xiě)方式,文件共享讀寫(xiě)。
關(guān)閉設(shè)備:CloseHandle (hDevice)。
6.2 數(shù)據(jù)傳輸
其代碼為BOOL bResult = DeviceloControl (hDevice,direction,Control,sizeof xxxx_TRANSFER_CONTROL),buffer,length, (unsigned long*)nBytes,NULL),其中,hDevice為設(shè)備句柄;direction為數(shù)據(jù)傳輸?shù)姆较颍籆ontrol為4種USB數(shù)據(jù)傳輸?shù)姆绞竭x擇;size(xxxx_TRANSFER_CONTROL)為數(shù)據(jù)格式所需存儲(chǔ)空間的大?。籦uffer為所傳輸數(shù)據(jù)的緩沖區(qū)地址指針;nBytes為傳輸完成后實(shí)際傳輸?shù)臄?shù)據(jù)個(gè)數(shù):數(shù)據(jù)傳輸格式為USB設(shè)備的統(tǒng)一規(guī)范,可參照Windows DDK中的相應(yīng)文件。
6.3 數(shù)據(jù)傳輸?shù)?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/通信協(xié)議">通信協(xié)議
每個(gè)數(shù)據(jù)包由包頭和數(shù)據(jù)或者只由包頭組成,最大的數(shù)據(jù)長(zhǎng)度為64字節(jié),由于本應(yīng)用所采用的該系列的80引腳的CY7C64603沒(méi)有"數(shù)據(jù)空"對(duì)外標(biāo)志,所以,外部電路讀寫(xiě)邏輯每次瀆寫(xiě)64字節(jié)。傳輸?shù)淖止?jié)不足64時(shí)由固件補(bǔ)零:·數(shù)據(jù)包格式如圖3所示。
評(píng)論