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