這(zhè)裏舉例講述生成EZ-Loader固件裝載驅動程序的(de)詳細過程,所選取的(de)例子是"按鈕和(hé)燈",在目錄..\buttons and lights\dev_io\下(xià)的(de)目标程序,它由Keil軟件工具編譯、鏈接後生成。設計的(de)目标是在設備插上後,主機能通(tōng)過USB總線自動下(xià)載該固件到EZ-USB外設芯片中,并自動運行該固件程序。
首先,需要分(fēn)配設備的(de)VID/PID号。采用(yòng)重枚舉的(de)設備需要兩個(gè)VID/PID,一個(gè)綁定到固件下(xià)載之前的(de)設備驅動程序,另一個(gè)綁定到固件下(xià)載之後的(de)設備驅動程序。在此,前一個(gè)驅動程序等待我們開發,後一個(gè)驅動程序采用(yòng)EZ-USB軟件開發包提供的(de)ezusb.sys驅動程序。我們将PID=0X1004綁定到前一個(gè)驅動程序;PID=0X1005綁定到ezusb.sys驅動程序。VID均爲0x0547。注意:這(zhè)裏的(de)USB設備的(de)PID爲0x1004。
開發固件裝載設備驅動程序按照(zhào)如下(xià)步驟進行:
(1) 新建一個(gè)目錄,假設爲dev_io。将cypress\ usb\ drivers\ ezloader 目錄下(xià)的(de)文件和(hé)子目錄的(de)内容全部複制到該目錄下(xià)。
(2) 用(yòng)任何一個(gè)文本編輯器打開該目錄下(xià)的(de)sources文件,修改如下(xià)一行
TARGETNAME=ezloader
爲
TARGETNAME=dev_io
這(zhè)一名稱将影(yǐng)響到最後産生的(de).sys文件的(de)名稱。
(3) 利用(yòng)hex2c.exe,将dev_io.hex文件轉換爲dev_io.c文件。
Hex2c dev_io.hex dev_io.c
現在,dev_io.c包含一個(gè)Intel HEX記錄結構的(de)數組,被稱爲firmware.
(4) 打開bal.c和(hé)firmware.c文件,将firmware.c中的(de)firmware[ ]數組用(yòng)dev_io.c中的(de)firmware[ ] 數組替換;
(5) 利用(yòng)windows DDK創建目标驅動程序。運行build.exe,選擇DDK的(de)free或者是checked環境,進入到bal子目錄,鍵入
build -c
開始創建驅動程序。這(zhè)取決于所選的(de)編譯環境,編譯成功的(de)話(huà),将在\\..\dev_io\lib\i386\checked或..\dev_io\lib\i386\free目錄下(xià)産生一個(gè)dev_io.sys文件,這(zhè)就是我們需要的(de)固件裝載設備驅動程序(目标驅動程序),将該驅動程序複制到c:\windows\system32\drivers目錄下(xià)。
(6)最後,要使得(de)該驅動程序正确工作,還(hái)必須爲它寫一個(gè)安裝信息,即.inf文件。它将設備的(de)VID/PID綁定到特定的(de)設備驅動程序上。該inf文件可(kě)存放在任何一個(gè)指定的(de)目錄下(xià),當該USB設備首次被連接時(shí),系統會自動詢問該文件的(de)位置。我們創建一個(gè)dev_io.inf文件。該文件内容如下(xià):
下(xià)載 dev_io.inf文件
(7)修改開發闆的(de)VID/PID爲0x0547/0x1004。将該USB外設的(de)PID号寫入到串行EEPROM中。有兩種方法:
第一種:使用(yòng)EEPROM編程器。将B0 47 05 04 10 01 00 七個(gè)字節編程到串行EEPROM的(de)前7個(gè)單元中。
第二種:使用(yòng)EZUSB控制面闆。單擊Download按鈕,選擇\\…\Cypress \usb\ Examples\ EzUsb\ Vend_Ax\ Vend_Ax.hex文件,幾秒後該文件将下(xià)載到EZ-USB芯片中,接著(zhe)修改ezusb開發闆的(de)PID爲上一步中.inf文件所指定的(de)PID的(de)值,設置Req=0xA2,Dir=OUT,最後,單擊Vend_Req按鈕,即可(kě)将新的(de)PID值寫入到串行的(de)EEPROM中。
(8) 重新插上開發闆,Windows提示找到新硬件,并要求提供該設備的(de)驅動程序。按照(zhào)windows添加新硬件向導的(de)提示,将dev_io.inf提供給windows.
(9) 查看結果,發現驅動程序裝入後,dev_io.hex固件就開始在開發闆上運行了(le)。 |