隨著信息技術(shù)的飛速發(fā)展,通用串行總線(USB)因其高速度、即插即用和強(qiáng)大的擴(kuò)展能力,已成為計(jì)算機(jī)與外部設(shè)備通信的主流接口。在嵌入式系統(tǒng)和工控領(lǐng)域,實(shí)現(xiàn)穩(wěn)定可靠的USB通信是許多應(yīng)用的核心需求。CH372芯片作為一款高性價(jià)比的USB總線接口芯片,內(nèi)置固件程序,簡化了硬件設(shè)計(jì)和軟件開發(fā)流程,成為快速構(gòu)建USB從設(shè)備通信系統(tǒng)的理想選擇。本文將系統(tǒng)闡述基于CH372芯片的USB通信系統(tǒng)的軟硬件設(shè)計(jì)與開發(fā)過程。
一、 系統(tǒng)總體設(shè)計(jì)與CH372芯片概述
基于CH372的USB通信系統(tǒng)通常采用“主控制器 + CH372 + 外部設(shè)備”的架構(gòu)。主控制器(如51單片機(jī)、ARM、DSP等)通過并行或串行接口與CH372芯片相連,CH372則負(fù)責(zé)處理底層的USB協(xié)議,實(shí)現(xiàn)與計(jì)算機(jī)主機(jī)的高速數(shù)據(jù)交換。
CH372芯片核心特性:
1. 協(xié)議內(nèi)置:芯片內(nèi)部固化了USB通信協(xié)議,無需開發(fā)者深入理解復(fù)雜的USB協(xié)議棧,大大降低了開發(fā)門檻。
2. 接口靈活:支持8位并行被動(dòng)接口和串行接口,可輕松適配多種主控制器。
3. 多種模式:提供內(nèi)置固件的USB設(shè)備模式和外置固件的USB主機(jī)模式,本文主要討論其作為從設(shè)備的應(yīng)用。
4. 簡化命令:通過發(fā)送簡單的命令碼即可完成端點(diǎn)配置、數(shù)據(jù)收發(fā)等操作。
二、 硬件電路設(shè)計(jì)
硬件設(shè)計(jì)是系統(tǒng)穩(wěn)定運(yùn)行的物理基礎(chǔ),主要圍繞CH372與主控制器及計(jì)算機(jī)的接口展開。
1. 電源與時(shí)鐘電路:
- CH372采用單電源供電(+5V或+3.3V),需注意電源的穩(wěn)定性,建議增加濾波電容。
- 芯片內(nèi)置晶振電路,只需外接一個(gè)12MHz的晶體振蕩器和兩個(gè)負(fù)載電容即可產(chǎn)生基準(zhǔn)時(shí)鐘。
2. USB接口電路:
- 嚴(yán)格遵循USB規(guī)范設(shè)計(jì)。D+和D-信號(hào)線需使用差分走線,并靠近放置,以抑制干擾。
- 在D+和D-線上各串聯(lián)一個(gè)小電阻(如22Ω),并預(yù)留上拉電阻位置(通常1.5kΩ接至3.3V)。CH372芯片內(nèi)部已集成上拉電阻,可通過軟件配置是否連接。
- USB接口的屏蔽層應(yīng)良好接地。
3. 與主控制器的接口電路:
- 并行接口模式(推薦):連接主控制器的數(shù)據(jù)總線(D0-D7)、地址線(如A0用于區(qū)分命令與數(shù)據(jù)端口)、讀寫控制線(RD#, WR#)和片選線(CS#)。此模式速度最快,控制直觀。
- 串行接口模式:僅需連接數(shù)據(jù)線(SDI/SDO)和時(shí)鐘線(SCK),節(jié)省I/O資源,但通信速率較低。
- 需注意電平匹配,如果主控制器與CH372工作電壓不同,需進(jìn)行電平轉(zhuǎn)換。
4. 輔助電路:
- 復(fù)位電路:可采用RC復(fù)位或主控制器I/O口控制復(fù)位,確保上電穩(wěn)定。
- 狀態(tài)指示:可連接LED至CH372的ACT#引腳,用于指示USB連接狀態(tài)。
三、 固件程序設(shè)計(jì)(下位機(jī)開發(fā))
固件程序運(yùn)行于主控制器中,是控制CH372、處理應(yīng)用數(shù)據(jù)邏輯的核心。
1. 初始化流程:
- 主控制器硬件初始化(I/O口、定時(shí)器等)。
- 復(fù)位CH372芯片。
- 測(cè)試與CH372的通信,通常通過發(fā)送
GET<em>IC</em>VER命令獲取芯片版本號(hào)以驗(yàn)證連接。
- 設(shè)置USB工作模式,例如使用
SET<em>USB</em>MODE命令設(shè)置為設(shè)備模式。
- 等待CH372上報(bào)
USB<em>INT</em>CONNECT中斷,表示已成功連接到計(jì)算機(jī)主機(jī)。
2. 中斷服務(wù)處理:
- CH372通過INT#引腳向主控制器請(qǐng)求中斷。主控制器進(jìn)入中斷服務(wù)程序后,首先發(fā)送GET_STATUS命令獲取中斷狀態(tài)。
- 根據(jù)不同的狀態(tài)碼進(jìn)行分支處理,主要包括:
- 傳輸成功中斷:讀取或?qū)懭攵它c(diǎn)緩沖區(qū)數(shù)據(jù),完成一次USB事務(wù)。
- 設(shè)備連接/斷開中斷:更新系統(tǒng)狀態(tài)。
- 控制傳輸中斷(SETUP):這是最關(guān)鍵的部分,用于處理主機(jī)下發(fā)的標(biāo)準(zhǔn)USB設(shè)備請(qǐng)求(如獲取描述符、設(shè)置地址、配置設(shè)備等)。開發(fā)者需要根據(jù)請(qǐng)求類型解析數(shù)據(jù),并返回相應(yīng)的描述符或應(yīng)答。
3. 數(shù)據(jù)收發(fā)流程:
- 發(fā)送數(shù)據(jù)(IN事務(wù)):當(dāng)主機(jī)需要讀取數(shù)據(jù)時(shí),CH372會(huì)觸發(fā)相應(yīng)端點(diǎn)的傳輸成功中斷。主控制器在中斷中,使用WR<em>USB</em>DATA命令將待發(fā)送數(shù)據(jù)寫入CH372的緩沖區(qū),CH372會(huì)自動(dòng)將其發(fā)送給主機(jī)。
- 接收數(shù)據(jù)(OUT事務(wù)):當(dāng)主機(jī)發(fā)送數(shù)據(jù)到設(shè)備時(shí),CH372觸發(fā)中斷。主控制器使用
RD<em>USB</em>DATA命令從CH372緩沖區(qū)讀取主機(jī)下發(fā)的數(shù)據(jù)。
- 開發(fā)者需要根據(jù)應(yīng)用層協(xié)議,對(duì)收發(fā)數(shù)據(jù)進(jìn)行封裝、解析和校驗(yàn)。
4. 描述符配置:
- USB設(shè)備必須向主機(jī)報(bào)告一系列描述符,包括設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符和字符串描述符。這些描述符定義了設(shè)備的類型、廠商ID、產(chǎn)品ID、端點(diǎn)信息等。
- 這些描述符以常量數(shù)組的形式存儲(chǔ)在固件程序中,當(dāng)主機(jī)發(fā)起獲取描述符請(qǐng)求時(shí),固件程序?qū)⑵渫ㄟ^控制端點(diǎn)返回。
四、 主機(jī)端驅(qū)動(dòng)程序與應(yīng)用程序開發(fā)(上位機(jī)開發(fā))
計(jì)算機(jī)(主機(jī))端需要與CH372設(shè)備進(jìn)行通信,通常涉及驅(qū)動(dòng)程序和應(yīng)用程序兩層。
1. 驅(qū)動(dòng)程序:
- 通用方案:CH372在Windows操作系統(tǒng)下自帶通用的USB設(shè)備驅(qū)動(dòng)程序(CH372DRV)。該驅(qū)動(dòng)程序?qū)SB設(shè)備映射為一個(gè)虛擬的串口或直接提供API接口,極大簡化了上位機(jī)開發(fā)。開發(fā)者只需安裝此驅(qū)動(dòng),無需編寫專用的內(nèi)核驅(qū)動(dòng)。
- 自定義方案:如需更高效或特定的控制,可以基于Windows的WinUSB、libusb等通用框架,或使用DDK/WDK開發(fā)專用的內(nèi)核模式驅(qū)動(dòng)。
2. 應(yīng)用程序開發(fā):
- 應(yīng)用層軟件通過調(diào)用驅(qū)動(dòng)程序提供的API接口與設(shè)備通信。
- 使用CH372官方DLL:沁恒公司提供了CH372的編程接口(DLL動(dòng)態(tài)鏈接庫),包含打開設(shè)備、關(guān)閉設(shè)備、讀寫數(shù)據(jù)等函數(shù)。在C++、C#、Delphi等開發(fā)環(huán)境中可方便調(diào)用。
- 開發(fā)流程示例(C#):
- 調(diào)用
CH375OpenDevice打開指定索引的設(shè)備。
- 使用
CH375WriteData向設(shè)備發(fā)送數(shù)據(jù)包。
- 使用
CH375ReadData從設(shè)備讀取數(shù)據(jù)包,可采用查詢或事件通知方式。
- 通信結(jié)束時(shí)調(diào)用
CH375CloseDevice關(guān)閉設(shè)備。
- 應(yīng)用程序需實(shí)現(xiàn)用戶界面、數(shù)據(jù)編碼/解碼、文件處理、通信狀態(tài)監(jiān)控等業(yè)務(wù)邏輯。
五、 系統(tǒng)調(diào)試與優(yōu)化
- 硬件調(diào)試:使用萬用表、示波器檢查電源、時(shí)鐘和信號(hào)線質(zhì)量。重點(diǎn)觀察USB數(shù)據(jù)線波形是否清晰。
- 軟件調(diào)試:
- 下位機(jī):可通過串口打印調(diào)試信息,或使用邏輯分析儀捕捉主控制器與CH372之間的總線時(shí)序。
- 上位機(jī):利用驅(qū)動(dòng)程序提供的調(diào)試工具或自行編寫測(cè)試程序進(jìn)行數(shù)據(jù)回環(huán)測(cè)試。
- 協(xié)議分析:使用USB協(xié)議分析儀(如Ellisys, Beagle)抓取USB總線上的原始數(shù)據(jù)包,是定位通信問題的終極手段,可以清晰看到描述符請(qǐng)求、數(shù)據(jù)傳輸全過程。
- 性能優(yōu)化:優(yōu)化固件中斷處理流程,減少不必要的延遲;合理使用CH372的多端點(diǎn)緩沖;在上位機(jī)采用異步I/O或重疊I/O模型提高吞吐量。
###
基于CH372芯片設(shè)計(jì)USB通信系統(tǒng),巧妙地通過硬件芯片分擔(dān)了復(fù)雜的協(xié)議處理任務(wù),使得開發(fā)者能夠聚焦于應(yīng)用功能的實(shí)現(xiàn)。其清晰的硬件接口、簡化的命令集和成熟的配套軟件資源,構(gòu)成了一套高效、快捷的USB從設(shè)備解決方案。成功的設(shè)計(jì)需要硬件電路的嚴(yán)謹(jǐn)、固件邏輯的穩(wěn)健以及主機(jī)軟件的協(xié)同。隨著開發(fā)的深入,開發(fā)者可以進(jìn)一步探索其主機(jī)模式、并利用其構(gòu)建更復(fù)雜的雙向通信系統(tǒng),滿足工業(yè)控制、數(shù)據(jù)采集、智能設(shè)備等廣泛領(lǐng)域的應(yīng)用需求。