




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、EZ-USB 68013A開發(fā)指南Airhand 2006-4-51. 元器件CYPRESS 68013A:支持USB 2.0協(xié)議,帶增強(qiáng)型8051單片機(jī),時(shí)鐘頻率48Mhz。支持串口通訊。2. 文檔cy7c68013.pdf68013外設(shè)手冊(cè)cy7c68013_5.pdf68013外設(shè)手冊(cè)CY3684_A_SCH.PDF68013A外圍電路圖FX2 TechRefManual.pdfEZUSB-FX2技術(shù)手冊(cè)fx2_to_fx2lp.pdfFX2和FX2LP的區(qū)別CYAPI.PDFCYAPI手冊(cè) 高級(jí)類庫CYUSB.PDFCYUSB手冊(cè) 底層API3. 開發(fā)環(huán)境3.1 Keil C 7.0編
2、譯器3.2 C+ Builder 6.03.3 VC+ 6.03.4 EEPROM燒寫器3.5 68013A的開發(fā)包(含CYPRESS CONSOLE、CYUSB.SYS、例程等)3.6 BUS HOUND 5.04. 開發(fā)流程4.1 硬件程序編寫1)根據(jù)CYPRESS的示例程序建立工程框架,一般由FW.C PERIPH.C和定義寄存器的幾個(gè)頭文件組成。如下圖:2)FW.C負(fù)責(zé)了設(shè)備連接、重枚舉、設(shè)備初始化等過程3)PERIPH.C負(fù)責(zé)響應(yīng)各種中斷事件。4)dscr.a51文件定義了USB設(shè)備握手時(shí)需要的各種描述符5)FX2REGS.H定義了USB中所有的寄存器6)FX2.H主要定義了各種二級(jí)
3、中斷向量和描述符的數(shù)據(jù)結(jié)構(gòu)7)編譯后的二進(jìn)制代碼和工程同名,擴(kuò)展名為HEX。8) 相應(yīng)的頭文件和類庫在KEIL C的lib和inc文件夾內(nèi),需在項(xiàng)目設(shè)置中設(shè)置路徑。4.2 硬件程序燒錄1)因?yàn)楸井a(chǎn)品要求將二進(jìn)制代碼和硬件PID/VID燒錄在EEPROM,而不是使用CYPRESS推薦的在線下載方式,所以外部采用了8K的EEPROM。上電后68013A會(huì)將EEPROM中的數(shù)據(jù)和程序加載到RAM中運(yùn)行。2)HEX文件只是68013A上8051的程序代碼,還要加上PID/VID等信息才能正確運(yùn)行,CYPRESS在開發(fā)包中提供了HEX2BIN.EXE這個(gè)工具,可以根據(jù)HEX生成完備的IIC文件,將此文件
4、燒錄到EEPROM上即可。3)HEX2BIN.EXE的使用方法如下:將XXX.HEX文件拷貝到HEX2BIN.EXE所在目錄,打開CMD,按如下格式輸入:hex2bix -i -o xxx.iic xxx.hex -f 0xC2 -v 0x1234 -p 0x1234-i表示輸出文件,也就是IIC文件-o表示輸入文件,也就是HEX文件-f表示68013A發(fā)送PID/VID的方式,這里為C0,即從EEPROM上讀取。-v表示VID的BCD碼,開發(fā)階段使用1234-p表示PID的BCD碼,開發(fā)階段使用12344)將生成的IIC文件用燒寫器燒錄到EEPROM上,本項(xiàng)目使用的是深圳思泰佳電子公司的NS
5、P通用燒寫器,此燒寫器不支持IIC類型,選擇BIN類型可替代。4.3 驅(qū)動(dòng)的識(shí)別1)將EEPROM連到68013A上后,接上USB線,上電。計(jì)算機(jī)提示找到新硬件,要求安裝驅(qū)動(dòng)。2)CYPRESS針對(duì)68013A提供了全新的驅(qū)動(dòng)程序CYUSB.SYS。這個(gè)驅(qū)動(dòng)使用了新的API,所以上位機(jī)的編寫上和舊的方式完全不同。底層的IOCTL控制字的定義也完全不同,詳見CYAPI.PDF和CYUSB.PDF。3)安裝驅(qū)動(dòng)之前,必須先根據(jù)VID/PID正確編輯CYUSB.INF文件,在文件中添加自己的PID/VID代碼和設(shè)備描述,連接設(shè)備時(shí),將根據(jù)硬件上的PID/VID查找INF文件中對(duì)應(yīng)的驅(qū)動(dòng),如果找不到,
6、在設(shè)備管理器中將顯示“68013 EEPROM MISSING”的字樣。4)詳細(xì)的INF配置方法參考CYUSB.PDF PART1/PART2/PART3。這里不在贅述。5)安裝驅(qū)動(dòng)時(shí)候找到修改好的CYUSB.INF文件,驅(qū)動(dòng)將被正確安裝,此時(shí)設(shè)備可以正常使用。4.4 測(cè)試過程1)被正確識(shí)別的設(shè)備可以在CYPRESS CONSOLE上看到設(shè)備信息。如圖:2)CYPRESS CONSOLE的具體使用方法請(qǐng)參考CyConsole.chm。3)要注意的是,除EP0/EP1外,當(dāng)其他端點(diǎn)Max Pkt Size大小為64字節(jié)時(shí),表示工作在USB 1.1模式,有可能是軟件的原因,也有可能是外圍上拉電阻的
7、問題。開發(fā)中要特別注意。5. 推薦開發(fā)流程5.1 看本介紹USB 2.0協(xié)議的書,對(duì)USB 2.0協(xié)議有所了解。推薦USB 2.0原理與工程開發(fā)5.2 看CYUSB.PDF文檔。了解驅(qū)動(dòng)安裝方法。5.3 看KEIL C51的書籍,熟悉C51的編程方法,熟悉KEIL C編程環(huán)境。5.4 看CYPRESS提供的例程,了解68013A編程框架。推薦EZ-USB 2100系列單片機(jī)原理、編程及應(yīng)用(基本框架類似,部分寄存器定義不同)。5.5 對(duì)照USB 2.0協(xié)議,編寫dscr.a51文件,配置各種描述符。5.6 結(jié)合FX2 TechRefManual.pdf,研讀FW.C、PERIPH.C、FX2R
8、EGS.H、FX2.H,了解寄存器的定義。5.7 根據(jù)系統(tǒng)需求編寫響應(yīng)代碼,有開發(fā)板時(shí),根據(jù)開發(fā)版上的LED來測(cè)試程序正確與否。5.8 根據(jù)CYAPI.PDF CYUSB.PDF編寫上位機(jī)通訊程序。同步讀取數(shù)據(jù)方法XferData();異步讀取數(shù)據(jù)方法BeginDataXfer()/WaitForXfer()/FinishDataXfer();5.9 調(diào)試程序。5.10 編寫其他8051上的程序,并繼續(xù)調(diào)試。6. 發(fā)布時(shí)應(yīng)提供的文件1)CYUSB.SYS2)CYUSB.INF3)XXX.IIC7. 重點(diǎn)講解7.1 如何理解CYPRESS 68013A程序框架CYPRESS提供了非常好的程序框架
9、,免去了用戶自己編寫一些通用性比較強(qiáng)、模式化的程序(如果不提供,很少有人能寫出如此高效,結(jié)構(gòu)緊湊的程序,實(shí)際上此框架和68013A內(nèi)部結(jié)構(gòu)關(guān)系密切,一般人也沒有足夠的內(nèi)部資料也不可能寫出來)。在框架的基礎(chǔ)上,用戶只需在相應(yīng)的地方寫相應(yīng)的代碼即可完成USB工作。一般來說框架可以分成3個(gè)部分。1) 描述符文件。例如dscr.a51文件,里面定義了枚舉設(shè)備的時(shí)候要用的各種描述符信息,這部分用戶需要根據(jù)實(shí)際的情況自己編寫。我寫的時(shí)候發(fā)現(xiàn)一個(gè)最大的問題就是各種書籍協(xié)議版本不同,翻譯質(zhì)量不同,同一字段的意義表述不同,容易讓人產(chǎn)生困惑。例如USB 1.1/2.0/2.13對(duì)設(shè)備類型的子類定義都不完全相同,所
10、以寫的時(shí)候最好幾種文檔對(duì)比起來寫。由于USB官方網(wǎng)站的文檔中字段解釋過于專業(yè)化,所以對(duì)USB不是很熟悉的人比較難以理解其真正含義。所以要多參考不同的書籍,某種程度上降低了開發(fā)速度,但對(duì)第一次做USB開發(fā)的人來說,這也是值得的。2) 固件文件,例如FW.C文件,這是硬件程序的函數(shù)入口。主要有以下這些方法:void SetupCommand(void); /握手命令處理void TD_Init(void);/初始化,完成配置,啟動(dòng)時(shí)調(diào)用一次void TD_Poll(void);/用戶處理程序,循環(huán)調(diào)用void IO_Init(void);/8051 IO初始化void REG_Init(void)
11、;/8051寄存器初始化BOOL TD_Suspend(void);/掛起處理BOOL TD_Resume(void);/喚醒處理/以下為各種描述符的獲取和設(shè)置函數(shù),重枚舉時(shí)自動(dòng)調(diào)用BOOL DR_GetDescriptor(void);BOOL DR_SetConfiguration(void);BOOL DR_GetConfiguration(void);BOOL DR_SetInterface(void);BOOL DR_GetInterface(void);BOOL DR_GetStatus(void);BOOL DR_ClearFeature(void);BOOL DR_SetFea
12、ture(void);BOOL DR_VendorCmnd(void);3) 功能文件,處理各種中斷。例如PERIPH.C文件。8051一般默認(rèn)只有四個(gè)中斷,這顯然不夠USB使用,所以CYPRESS引入了自動(dòng)向量的概念,相當(dāng)于軟中斷,大大擴(kuò)展了現(xiàn)有的中斷數(shù)量。主要的中斷有:void ISR_Sudav(void) interrupt 0 /收到setup包void ISR_Sutok(void) interrupt 0 /收到SETUP令牌void ISR_Sof(void) interrupt 0 /收到起始幀void ISR_Ures(void) interrupt 0 /收到RESETv
13、oid ISR_Susp(void) interrupt 0/收到掛起信息void ISR_Highspeed(void) interrupt 0 /高速模式void ISR_Ep0ack(void) interrupt 0/正常響應(yīng)ACKvoid ISR_Stub(void) interrupt 0void ISR_Ep0in(void) interrupt 0void ISR_Ep0out(void) interrupt 0void ISR_Ep1in(void) interrupt 0void ISR_Ep1out(void) interrupt 0 /EP1輸入中斷void ISR_E
14、p2inout(void) interrupt 0/EP2中斷void ISR_Ep4inout(void) interrupt 0void ISR_Ep6inout(void) interrupt 0void ISR_Ep8inout(void) interrupt 0void ISR_Ibn(void) interrupt 0void ISR_Ep0pingnak(void) interrupt 0void ISR_Ep1pingnak(void) interrupt 0void ISR_Ep2pingnak(void) interrupt 0void ISR_Ep4pingnak(voi
15、d) interrupt 0void ISR_Ep6pingnak(void) interrupt 0void ISR_Ep8pingnak(void) interrupt 0void ISR_Errorlimit(void) interrupt 0void ISR_Ep2piderror(void) interrupt 0void ISR_Ep4piderror(void) interrupt 0void ISR_Ep6piderror(void) interrupt 0void ISR_Ep8piderror(void) interrupt 0void ISR_Ep2pflag(void)
16、 interrupt 0void ISR_Ep4pflag(void) interrupt 0void ISR_Ep6pflag(void) interrupt 0void ISR_Ep8pflag(void) interrupt 0void ISR_Ep2eflag(void) interrupt 0void ISR_Ep4eflag(void) interrupt 0void ISR_Ep6eflag(void) interrupt 0void ISR_Ep8eflag(void) interrupt 0void ISR_Ep2fflag(void) interrupt 0void ISR
17、_Ep4fflag(void) interrupt 0void ISR_Ep6fflag(void) interrupt 0void ISR_Ep8fflag(void) interrupt 0void ISR_GpifComplete(void) interrupt 0void ISR_GpifWaveform(void) interrupt 0特別是對(duì)于接受數(shù)據(jù),一般都在中斷中完成相應(yīng)處理,“中斷中適合進(jìn)行少量簡(jiǎn)短的操作,不適合進(jìn)行復(fù)雜操作”,這句話在此依然有效。如果要進(jìn)行復(fù)雜的操作可以在TD_POLL()中進(jìn)行(多數(shù)操作都是在這個(gè)函數(shù)中完成的)。另外非常重要的一點(diǎn)是,中斷程序的結(jié)尾應(yīng)該讓
18、中斷復(fù)位,允許下一次中斷,有些端點(diǎn)的計(jì)數(shù)器也要清零并允許接受新的中斷請(qǐng)求。例如:EP1OUTBC = 0;/清空計(jì)數(shù)EZUSB_IRQ_CLEAR(); /USB中斷復(fù)位EPIRQ = 0x08; /允許EP1中斷請(qǐng)求7.2 68013A端點(diǎn)寄存器介紹68013A內(nèi)部的寄存器約有300個(gè)上下,一次都記住是不可能的,而且每個(gè)寄存器都有8個(gè)位,也就是說一共有2000多個(gè)可以配置的位,一次都理解掌握這些位的含義也是不可能的,所幸地是開發(fā)中并不會(huì)用到所有的寄存器,但是依然強(qiáng)烈建議把FX2REGS.H和FX2.H走讀一邊,這就像讀書一樣,沒有學(xué)會(huì)識(shí)字,再看都是天書。結(jié)合FX2 TechRefManual
19、.pdf走讀這些寄存器大約需要一到兩天時(shí)間,這點(diǎn)時(shí)間投入還是值得的。在通訊過程中,打交道最多的是各種端點(diǎn)寄存器,掌握好這些寄存器地使用對(duì)提升開發(fā)效率是很有幫助。值得特別關(guān)注的寄存器和配置位如下:Rwuen、REVCTL、EP1OUTCFG、EP1INCFG、EP2CFG、EP4CFG、EP6CFG、EP8CFG、EP2FIFOCFG、EP4FIFOCFG、EP6FIFOCFG、EP8FIFOCFG、FIFORESET、EPIRQ、EPIE、EP1OUTBC、APTR1H、APTR1L、EXTAUTODAT1、AUTOPTRH2、AUTOPTRL2、EXTAUTODAT2、EP2BCH、EP2B
20、CL其中有些寄存器的設(shè)置需要連續(xù)設(shè)置多次,看似重復(fù)了,其實(shí)不然,這和設(shè)置的緩沖區(qū)數(shù)量有關(guān)。有些寄存器中間必須用SYNCDELAY來延時(shí)。這類寄存器FX2 TechRefManual.pdf上有說明。對(duì)于EP0,用于系統(tǒng)握手,相關(guān)的寄存器操作基本上都由68013A的內(nèi)核(SIE)來完成了。對(duì)于EP1,分為OUT/IN兩組配置和寄存器。對(duì)于EP2EP8,不分OUT/IN輸入輸出,主要有EP2CFG/ EP2FIFOCFG/ EP2BCH/EP2BCL寄存器。7.3 什么是自動(dòng)指針自動(dòng)指針是CYPRESS提供的一個(gè)非常有用的特性。在數(shù)據(jù)交互的過程中,很多時(shí)候都涉及到數(shù)據(jù)的搬遷,比如從EP2OUT收到
21、的數(shù)據(jù)需要轉(zhuǎn)發(fā)到EP6IN上(一些轉(zhuǎn)換類設(shè)備);再比如從RAM中拷貝數(shù)據(jù)到EP4IN上,傳統(tǒng)的做法是申明兩個(gè)指針,指向源和目的地址,然后用循環(huán)一個(gè)個(gè)字節(jié)拷貝,同時(shí)還要考慮增加指針地址,對(duì)于連續(xù)的空間這到不是問題,關(guān)鍵是如果數(shù)據(jù)需要拷貝到多個(gè)緩沖時(shí),指針地址是循環(huán)的。這時(shí)候如果手工完成操作很容易出錯(cuò)。因此CYPRESS提供了兩組自動(dòng)指針,用的時(shí)候一組指向源,一組指向目的地址。然后循環(huán)拷貝數(shù)據(jù)就行了,自動(dòng)指針會(huì)自動(dòng)指向下一個(gè)源或目的空間,不論是否是循環(huán)地址方式。這樣減少了程序出錯(cuò)的幾率。下面的程序?qū)P2OUT接受到的數(shù)據(jù)拷貝到EP6IN發(fā)送出去: if(!(EP2468STAT & bmEP6F
22、ULL) / check EP6 FULL(busy) bit in EP2468STAT (SFR), core sets this bit when FIFO is full APTR1H = MSB( &EP2FIFOBUF ); APTR1L = LSB( &EP2FIFOBUF ); AUTOPTRH2 = MSB( &EP6FIFOBUF ); AUTOPTRL2 = LSB( &EP6FIFOBUF ); count = (EP2BCH 8) + EP2BCL; / loop EP2OUT buffer data to EP6IN for( i = 0x0000; i count
23、; i+ ) / setup to transfer EP2OUT buffer to EP6IN buffer using AUTOPOINTER(s) EXTAUTODAT2 = EXTAUTODAT1; EP6BCH = EP2BCH; SYNCDELAY; EP6BCL = EP2BCL; / arm EP6IN SYNCDELAY; EP2BCL = 0x80; / re(arm) EP2OUT APTR1H/APTR1H通過MSB和LSB獲取EP2FIFOBUF的高位地址和地位地址。EXTAUTODAT1表示APTR1H/APTR1H指向的數(shù)據(jù)。AUTOPTRH2/AUTOPTRL2通過MSB和LSB獲取EP6FIFOBUF的高位地址和地位地址。EXTAUTODAT2表示AUTOPTRH2/AUTOPTRL2指向的數(shù)據(jù)。7.4 CYUSB和CYAPI的關(guān)系
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司目錄設(shè)計(jì)排版方案
- 家政物料補(bǔ)充方案
- 大班健康活動(dòng):哭的奧秘
- 小兒護(hù)理考試題及答案
- 維護(hù)電工考試題及答案
- 油庫節(jié)約管理方案(3篇)
- 2026版《全品高考》選考復(fù)習(xí)方案生物1057 課時(shí)作業(yè)(五十二) 動(dòng)物細(xì)胞工程 含答案
- 消防中隊(duì)考試題及答案
- 物業(yè)車輛維護(hù)管理方案
- 面神經(jīng)麻痹考試題及答案
- 2022年??谕顿Y管理有限公司招聘筆試試題及答案解析
- 青藍(lán)工程師傅心得體會(huì)
- 風(fēng)機(jī)基礎(chǔ)錨栓安裝技術(shù)交底
- 2022更新國家開放大學(xué)電大《調(diào)劑學(xué)》網(wǎng)絡(luò)核心課形考網(wǎng)考作業(yè)及答案
- 廣西鼎固經(jīng)緯新材料科技有限公司年加工50萬噸礦粉生產(chǎn)項(xiàng)目環(huán)評(píng)報(bào)告表
- 外研版六年級(jí)英語下冊(cè) Module2 unit1 教學(xué)課件PPT小學(xué)公開課
- 2021-2022學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè)第一單元測(cè)試卷【含答案】
- 《別墅設(shè)計(jì)任務(wù)書》word版
- EN 4644-001-2017(高清正版)
- 預(yù)應(yīng)力混凝土簡(jiǎn)支T形梁橋畢業(yè)論文
- 變頻器變頻altivar71說明書
評(píng)論
0/150
提交評(píng)論