国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于USB的虛擬IO橋接器的設(shè)計(jì)與實(shí)現(xiàn)

2023-10-12 09:41:24朱紹英顧云鷺
微型電腦應(yīng)用 2023年9期
關(guān)鍵詞:中斷命令數(shù)據(jù)包

朱紹英, 顧云鷺

(上海民航職業(yè)技術(shù)學(xué)院,大飛機(jī)學(xué)院,上海 200232)

0 引言

新型筆記本電腦為了便攜性,一方面其主板通過緊湊的設(shè)計(jì)布局提高集成度,另一方面其屏上也集成各種新傳感器及圖標(biāo)實(shí)現(xiàn)更方便、更智能的交互式使用。比如普通的觸摸、虛擬鍵盤、攝像頭以及自動(dòng)開關(guān)屏幕電源,用戶姿態(tài)感知,更高安全性的攝像頭電子開關(guān)等。這些“智能”功能的實(shí)現(xiàn)都要求在屏上集成更多的傳感器、攝像頭、電子開關(guān)和微處理器,在傳統(tǒng)的系統(tǒng)設(shè)計(jì)中,主板通過各種IO總線與這些模塊直接進(jìn)行通信,比如I2C、SPI、GPIO,這些IO線從主板穿過轉(zhuǎn)軸Hinge連接屏上的各種傳感器,由于轉(zhuǎn)軸的耐用性設(shè)計(jì),越來越多的連接線對(duì)成本和穩(wěn)定性帶來了極大的挑戰(zhàn),根據(jù)OEM提供的信息,每減少1根線就能節(jié)省約0.25美元且提高轉(zhuǎn)軸的耐用性。本文通過設(shè)計(jì)一種通用的IO橋接器解決這個(gè)問題,滿足原有IO性能的同時(shí),大幅減少轉(zhuǎn)軸連接線的需求,既提高轉(zhuǎn)軸的壽命,又降低系統(tǒng)成本。

1 虛擬IO橋接器

筆記本電腦屏上的傳感器等設(shè)備采用的接口主要包括I2C、SPI和GPIO等低速數(shù)據(jù)總線,所以設(shè)計(jì)中采用通用USB總線作為主板與屏的唯一高速數(shù)據(jù)通道,主板系統(tǒng)通過USB傳輸各種IO數(shù)據(jù)來控制具體傳感器等設(shè)備。

1.1 硬件架構(gòu)

綜合考慮性能與成本,硬件設(shè)計(jì)采用Cypress公司CY8C5868控制器,通過可編程控制USB設(shè)備、SPI、I2C和GPIO等接口[1-2]。如圖1所示,主板上分配1個(gè)USB端口,連接4根USB總線穿過轉(zhuǎn)軸,并與屏上的CY8C5868控制器的USB設(shè)備端口連接,CY8C5868控制器帶有各種可配置的接口,用于連接各種傳感器、攝像頭和電子開關(guān)[3]。

圖1 IO橋接器硬件架構(gòu)

相比傳統(tǒng)的硬件設(shè)計(jì),本文設(shè)計(jì)只需要從轉(zhuǎn)軸穿過4根USB總線,節(jié)省近12根IO線,并靈活支持?jǐn)?shù)量可變的IO總線設(shè)備,降低了成本且提高了穩(wěn)定性。

1.2 軟件架構(gòu)

在上述硬件設(shè)計(jì)基礎(chǔ)上,需要一步考慮主機(jī)驅(qū)動(dòng)、橋接器協(xié)議控制軟件和驅(qū)動(dòng)的設(shè)計(jì),從而提供單轉(zhuǎn)接設(shè)備更大的靈活性和性能。

如圖2所示,在主機(jī)系統(tǒng)(比如Windows)下實(shí)現(xiàn)基于USB的虛擬I2C、SPI、GPIO驅(qū)動(dòng),使得上層軟件能以同樣的方式操作這類IO接口,底層與IO橋接器之間實(shí)現(xiàn)一套命令協(xié)議,由IO橋接器上的軟件操作實(shí)際IO控制器,與具體設(shè)備進(jìn)行通信。

圖2 IO橋接器軟件架構(gòu)

2 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

基于該軟件架構(gòu),主機(jī)端各模塊有成熟的操作系統(tǒng)和各類驅(qū)動(dòng),框架可以直接利用,而在橋接器這端,考慮到成本和效率。采用的內(nèi)存和Flash空間較小,處理器頻率也低,所以橋接器接口傳輸協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)是關(guān)鍵。

2.1 接口傳輸協(xié)議

由于采用的USB設(shè)備端控制器只支持USB全速模式,根據(jù)規(guī)范,其bulk傳輸模式下packet的最大長度為64字節(jié)[4],相比簡單的GPIO操作,I2C和SPI可能需要支持超過64字節(jié)的數(shù)據(jù)傳輸,所以接口協(xié)議的設(shè)計(jì)在統(tǒng)一的基礎(chǔ)上也要考慮分包的靈活性[5-6]。如表1所示,統(tǒng)一的數(shù)據(jù)包頭用于區(qū)分從主機(jī)到橋接器的命令與數(shù)據(jù),或者反方向的響應(yīng)數(shù)據(jù),具體由cmd_id指定,表示各種IO操作或者管理命令。

表1 USB數(shù)據(jù)傳輸格式

USB總線協(xié)議是主從模式,所有傳輸都由主機(jī)端發(fā)起,IO橋接器端的USB設(shè)備從OUT端點(diǎn)接受命令,并將響應(yīng)數(shù)據(jù)放到IN端點(diǎn)由主機(jī)端讀取,如圖3所示。底層驅(qū)動(dòng)提供異步讀寫接口,設(shè)計(jì)中定義了3個(gè)緩存隊(duì)列,分別為空閑、命令、響應(yīng)隊(duì)列。初始化時(shí)命令和響應(yīng)隊(duì)列為空,從空閑隊(duì)列分配緩存給USB驅(qū)動(dòng)去從主機(jī)端收取數(shù)據(jù)包,驅(qū)動(dòng)完成后觸發(fā)USB中斷,將數(shù)據(jù)包加入命令隊(duì)列,由主線程解析命令,如果不是異步IO,比如GPIO讀寫,就直接操作響應(yīng)的GPIO管腳,然后將響應(yīng)設(shè)置到該數(shù)據(jù)包,加入響應(yīng)隊(duì)列,觸發(fā)USB發(fā)送函數(shù)。如果是異步IO,為了不阻礙其他命令的處理,由具體IO驅(qū)動(dòng)重新分配緩存,獲取響應(yīng)的數(shù)據(jù),加入響應(yīng)隊(duì)列并觸發(fā)USB發(fā)送函數(shù)。當(dāng)最終發(fā)送完成時(shí),在USB中斷例程中釋放該緩存并加入空閑隊(duì)列。

圖3 USB數(shù)據(jù)傳輸協(xié)議

2.1.1 I2C接口實(shí)現(xiàn)

基于上面的數(shù)據(jù)傳輸協(xié)議,為了實(shí)現(xiàn)I2C讀寫接口,設(shè)計(jì)的I2C主要命令格式如表2所示,由header中的命令I(lǐng)D指定驅(qū)動(dòng)I2C讀或?qū)?通過bus_num指定I2C控制器。具體讀寫的設(shè)備和寄存器由slave_addr和reg_addr設(shè)置,總包的長度不超過64字節(jié)。Windows或Linux主機(jī)端基于該命令接口實(shí)現(xiàn)一個(gè)虛擬USB轉(zhuǎn)I2C驅(qū)動(dòng),對(duì)于超過64字節(jié)的傳輸則通過主機(jī)端分包實(shí)現(xiàn),橋接器端通過特殊的flag做出相應(yīng)處理,底層調(diào)用I2C控制器驅(qū)動(dòng)完成實(shí)際的讀寫操作,并將響應(yīng)結(jié)果或數(shù)據(jù)返回給主機(jī)端。

表2 I2C命令數(shù)據(jù)包

2.1.2 SPI接口實(shí)現(xiàn)

相對(duì)于400 kHz的快速模式I2C總線,處理器CY8C5868上的SPI控制器最高支持14 MHz,具有更大的帶寬用于批量數(shù)據(jù)傳輸[7]。在該方案中,上層通信協(xié)議使用最大2 kb的SPI數(shù)據(jù)包,實(shí)現(xiàn)更上層的通信數(shù)據(jù)傳輸。由于全速模式的USB塊傳輸?shù)淖畲蟀南拗?主機(jī)端SPI轉(zhuǎn)USB驅(qū)動(dòng)將實(shí)際的協(xié)議包拆成不定個(gè)數(shù)的SPI命令數(shù)據(jù)包,如表3所示,offset用于指定拆包系列號(hào),在橋接器端,當(dāng)收到offset為0的包時(shí),調(diào)用SPI驅(qū)動(dòng)使能片選信號(hào)并將數(shù)據(jù)寫入或讀出設(shè)備,后續(xù)SPI數(shù)據(jù)包的offset依次遞增,直接啟動(dòng)SPI DMA進(jìn)行數(shù)據(jù)傳輸,當(dāng)收到offset為0xFF時(shí),表示這是最后一個(gè)SPI命令數(shù)據(jù)包,要求在數(shù)據(jù)傳輸完成時(shí)將片選信號(hào)置為無效,結(jié)束這次總的傳輸。

表3 SPI命令數(shù)據(jù)包

設(shè)計(jì)SPI驅(qū)動(dòng)時(shí),需要將控制器的CS片選設(shè)置為GPIO模式,默認(rèn)是由SPI讀寫自動(dòng)執(zhí)行的,這樣就無法實(shí)現(xiàn)上述的大數(shù)據(jù)包的處理,從而要求在橋接器這端先緩存從主機(jī)端發(fā)來的所有命令數(shù)據(jù)包,隨后再一次性啟動(dòng)SPI讀寫,這個(gè)方案會(huì)影響效率且要求更大的內(nèi)存。

2.1.3 GPIO接口實(shí)現(xiàn)

GPIO的讀寫相對(duì)簡單,如表4所示。只要標(biāo)識(shí)管腳號(hào)和高低電平。為了支持GPIO中斷輸入,需要主機(jī)驅(qū)動(dòng)端輪詢USB輸入端點(diǎn),因?yàn)閁SB設(shè)備端不能主動(dòng)發(fā)起數(shù)據(jù)傳輸,當(dāng)橋接器端GPIO驅(qū)動(dòng)檢測到GPIO中斷信號(hào)觸發(fā),就準(zhǔn)備好命令數(shù)據(jù)包,設(shè)置命令的ID為中斷類型,number為響應(yīng)的中斷GPIO管腳,value為中斷類型,這樣主機(jī)端讀到這個(gè)數(shù)據(jù)包時(shí)就知道響應(yīng)的GPIO發(fā)送中斷,實(shí)現(xiàn)完整的虛擬GPIO設(shè)備驅(qū)動(dòng)[8]。

表4 GPIO命令數(shù)據(jù)包

2.2 watchdog可靠性設(shè)計(jì)

由于主機(jī)端與IO橋接器只有USB總線連接,與直接的IO控制器相比,后者具有更強(qiáng)的出錯(cuò)恢復(fù)能力,如直接復(fù)位相應(yīng)的IO控制寄存器,所以IO橋接器需要從可靠性方面進(jìn)行設(shè)計(jì)。實(shí)現(xiàn)流程以一個(gè)硬件watchdog控制器為核心,設(shè)計(jì)了多個(gè)軟watchdog的靈活性監(jiān)控[9],主要實(shí)現(xiàn)流程如圖4所示。

圖4 Watchdog實(shí)現(xiàn)流程

利用硬件watchdog兩次timeout中斷的機(jī)制,在第一次timeout中斷時(shí)檢查各個(gè)軟watchdog的到期時(shí)間,當(dāng)出現(xiàn)非預(yù)期的故障導(dǎo)致軟watchdog的到期時(shí)間沒更新時(shí),就直接等待第二次timeout中斷,從而觸發(fā)最終的系統(tǒng)復(fù)位。由于多個(gè)軟watchdog的支持,在設(shè)計(jì)監(jiān)控時(shí),可以針對(duì)重要的和易出問題的地方選擇各自不同的timeout時(shí)間來使用軟watchdog。

2.3 低功耗管理與實(shí)現(xiàn)

筆記本電腦對(duì)電源續(xù)航時(shí)間敏感,IO橋接器的一個(gè)重要指標(biāo)是其功耗,設(shè)計(jì)中通過使能控制器的低功耗模式使得在空閑狀態(tài)下的功耗在2 mW以下。軟件的主要流程如圖5所示,當(dāng)主機(jī)端在一定的時(shí)間內(nèi)沒有數(shù)據(jù)傳輸請(qǐng)求且USB總線空閑時(shí)間超過300 ms,橋接器的USB設(shè)備控制器觸發(fā)suspend中斷,然后軟件完成必要的控制處理,將定時(shí)器、watchdog等暫停,然后進(jìn)入低功耗模式。一旦主機(jī)有新的傳輸請(qǐng)求或者其他事件中斷發(fā)生,就會(huì)自動(dòng)喚醒控制器,軟件就做恢復(fù)響應(yīng)處理。

圖5 系統(tǒng)低功耗管理

3 性能測試

下面分別從IO性能和可靠性兩個(gè)方面對(duì)IO橋接器進(jìn)行測試和分析。

3.1 IO性能測試

測試中在主機(jī)端設(shè)計(jì)測試用例,分別針對(duì)不同長度的IO讀寫請(qǐng)求重復(fù)1000次,統(tǒng)計(jì)時(shí)間并得到平均速度,如表5所示,結(jié)果表明快速模式下的I2C接口和14 MHz頻率下的SPI接口的讀寫性能隨著數(shù)據(jù)包的長度而增加,USB傳輸和IO橋接器的處理帶來了一定的處理開銷,符合方案中各設(shè)備的數(shù)據(jù)傳輸要求。更高性能就需要考慮選用支持高速USB總線和性能更高的控制器。

表5 IO性能

3.2 可靠性測試

根據(jù)上述可靠性設(shè)計(jì)測試IO橋接器在各種錯(cuò)誤下的恢復(fù)情況,衡量系統(tǒng)的穩(wěn)定性和可靠性。實(shí)際測試用例設(shè)計(jì)中,針對(duì)各種IO操作模擬產(chǎn)生一些錯(cuò)誤場景,如使用一些控制開關(guān)讓響應(yīng)的讀寫操作掛死[10]。主要包括:

① USB傳輸故障導(dǎo)致無法正常收發(fā)數(shù)據(jù)包;

② 系統(tǒng)性故障導(dǎo)致main task無法正常執(zhí)行;

③ I2C控制器讀寫故障;

④ SPI控制器讀寫故障;

⑤ GPIO控制器讀寫故障。

測試結(jié)果顯示,當(dāng)錯(cuò)誤發(fā)生后,相應(yīng)的軟watchdog能正確偵測并做出正確處理,主機(jī)端驅(qū)動(dòng)能從錯(cuò)誤中恢復(fù)。

4 總結(jié)

本文首先分析了IO橋接器的硬件和軟件架構(gòu),然后具體闡述了軟件的系統(tǒng)性設(shè)計(jì),包括USB傳輸協(xié)議的設(shè)計(jì)與實(shí)現(xiàn),I2C、SPI和GPIO接口的實(shí)現(xiàn)流程,并基于一個(gè)硬件watchdog設(shè)計(jì)實(shí)現(xiàn)了多個(gè)靈活的軟件watchdog,用于提高各個(gè)模塊的容錯(cuò)能力,提高整個(gè)系統(tǒng)的可靠性,且滿足低于2 mW的功耗設(shè)計(jì)。最后,列出了系統(tǒng)性能測試流程與結(jié)果,分析了可靠性測試原理,表明本文設(shè)計(jì)在各種錯(cuò)誤場景均能正常處理。

猜你喜歡
中斷命令數(shù)據(jù)包
只聽主人的命令
SmartSniff
移防命令下達(dá)后
跟蹤導(dǎo)練(二)(5)
千里移防,衛(wèi)勤保障不中斷
解放軍健康(2017年5期)2017-08-01 06:27:44
這是人民的命令
基于Libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲器的設(shè)計(jì)與實(shí)現(xiàn)
視覺注意的數(shù)據(jù)包優(yōu)先級(jí)排序策略研究
藍(lán)色命令
AT89C51與中斷有關(guān)的寄存器功能表解
沂源县| 无棣县| 武汉市| 台山市| 洞头县| 昭苏县| 宕昌县| 南召县| 教育| 南宁市| 耿马| 额尔古纳市| 谢通门县| 天台县| 贺州市| 六盘水市| 新疆| 手游| 阿拉善右旗| 揭西县| 通渭县| 梁河县| 田阳县| 嵩明县| 潼南县| 寻乌县| 盘山县| 武清区| 南充市| 海盐县| 大埔区| 汝城县| 兴城市| 望谟县| 陵川县| 来凤县| 双柏县| 祥云县| 会泽县| 博罗县| 北碚区|