女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

第二十二章 USB 全速設備接口(USB)

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-05-29 15:07 ? 次閱讀

單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網單片機

W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。

在封裝規格上,W55MH32 提供了兩種選擇:QFN68和QFN100。

W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、3個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN以及1個USB2.0。在保持與同系列其他版本一致的核心性能基礎上,僅減少了部分GPIO以及SDIO接口,其他參數保持一致,性價比優勢顯著,尤其適合網關模組等對空間布局要求較高的場景。緊湊的尺寸和精簡化外設配置,使其能夠在有限空間內實現高效的網絡連接與數據交互,成為物聯網網關、邊緣計算節點等緊湊型設備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設資源,適用于需要多接口擴展的復雜工控場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網絡通信安全再添保障。

為助力開發者快速上手與深入開發,基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。

若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZO2gbOfaAVPzkACJSygzv-rI600.png

第二十二章 USB 全速設備接口(USB)

1 USB 簡介

USB 外設實現了 USB2.0 全速總線和 APB1 總線間的接口。

USB 外設支持 USB 掛起/恢復操作,可以停止設備時鐘實現低功耗。

2 USB 主要特征

W55MH32的USB接口的主要特征如下:

?符合 USB2.0 全速設備的技術規范

?可配置 1 到 8 個 USB 端點

? CRC(循環冗余校驗)生成/校驗,反向不歸零(NRZI)編碼/解碼和位填充

? 支持同步傳輸

?支持批量/同步端點的雙緩沖區機制

?支持 USB 掛起/恢復操作

?幀鎖定時鐘脈沖生成

注: USB 和 CAN 共用一個專用的 512 字節的 SRAM 存儲器用于數據的發送和接收,因此不能同時使用USB 和 CAN(共享的 SRAM 被 USB 和 CAN 模塊互斥地訪問) 。USB 和 CAN 可以同時用于一個應用中但不能在同一個時間使用。下圖是 USB 外設的方框圖:

wKgZPGg4BkaAf3b2AAJhgAYy0es854.png

USB 設備框圖

3 USB 功能描述

USB 模塊為 PC 主機和微控制器所實現的功能之間提供了符合 USB 規范的通信連接。PC 主機和微控制器之間的數據傳輸是通過共享一專用的數據緩沖區來完成的,該數據緩沖區能被 USB 外設直接訪問。這塊專用數據緩沖區的大小由所使用的端點數目和每個端點最大的數據分組大小所決定,每個端點最大可使用 512 字節緩沖區,

最多可用于 16 個單向或 8 個雙向端點。USB 模塊同 PC 主機通信,根據 USB規范實現令牌分組的檢測,數據發送/接收的處理,和握手分組的處理。整個傳輸的格式由硬件完成,其中包括 CRC 的生成和校驗。每個端點都有一個緩沖區描述塊,描述該端點使用的緩沖區地址、大小和需要傳輸的字節數。當 USB 模塊識別出一個有效的功能/端點的令牌分組時,(如果需要傳輸數據并且端點已配置)隨之發生相關的數據傳輸。

USB 模塊通過一個內部的 16 位寄存器實現端口與專用緩沖區的數據交換。在所有的數據傳輸完成后,如果需要,則根據傳輸的方向,發送或接收適當的握手分組。在數據傳輸結束時,USB 模塊將觸發與端點相關的中斷,通過讀狀態寄存器和/或者利用不同的中斷處理程序,微控制器可以確定:

?哪個端點需要得到服務。

?產生如位填充、格式、CRC、協議、缺失 ACK、緩沖區溢出/緩沖區未滿等錯誤時,正在進行的是哪種類型的傳輸。USB 模塊對同步傳輸和高吞吐量的批量傳輸提供了特殊的雙緩沖區機制,在微控制器使用一個緩沖區的時候,該機制保證了 USB 外設總是可以使用另一個緩沖區。

在任何不需要使用 USB 模塊的時候,通過寫控制寄存器總可以使 USB 模塊置于低功耗模式(SUSPEND 模式)。在這種模式下,不產生任何靜態電流消耗,同時 USB 時鐘也會減慢或停止。通過對 USB 線上數據傳輸的檢測,可以在低功耗模式下喚醒 USB 模塊。也可以將一特定的中斷輸入源直接連接到喚醒引腳上,以使系統能立即恢復正常的時鐘系統,并支持直接啟動或停止時鐘系統。

3.1 USB 功能模塊描述

USB 模塊實現了標準 USB 接口的所有特性,它由以下部分組成:

?串行接口控制器(SIE):該模塊包括的功能有:幀頭同步域的識別,位填充,CRC 的產生和校驗,PID 的驗證/產生,和握手分組處理等。它與 USB 收發器交互,利用分組緩沖接口提供的虛擬緩沖區存儲局部數據。它也根據 USB 事件,和類似于傳輸結束或一個包正確接收等與端點相關事件生成信號,例如幀首(Start of Frame),USB 復位,數據錯誤等等,這些信號用來產生中斷。

?定時器:本模塊的功能是產生一個與幀開始報文同步的時鐘脈沖,并在 3ms 內沒有數據傳輸的狀態,檢測出(主機的)全局掛起條件。

?分組緩沖器接口:此模塊管理那些用于發送和接收的臨時本地內存單元。它根據 SIE 的要求分配合適的緩沖區,并定位到端點寄存器所指向的存儲區地址。它在每個字節傳輸后,自動遞增地址,直到數據分組傳輸結束。它記錄傳輸的字節數并防止緩沖區溢出。

?端點相關寄存器:每個端點都有一個與之相關的寄存器,用于描述端點類型和當前狀態。對于單向和單緩沖器端點,一個寄存器就可以用于實現兩個不同的端點。一共 8 個寄存器,可以用于實現最多 16 個單向/單緩沖的端點或者 7 個雙緩沖的端點或者這些端點的組合。例如,可以同時實現 4 個雙緩沖端點和 8 個單緩沖/單向端點。

?控制寄存器:這些寄存器包含整個 USB 模塊的狀態信息,用來觸發諸如恢復,低功耗等 USB事件。

?中斷寄存器:這些寄存器包含中斷屏蔽信息和中斷事件的記錄信息。配置和訪問這些寄存器可以獲取中斷源,中斷狀態等信息,并能清除待處理中斷的狀態標志。

注意: 端點 0 總是作為單緩沖模式下的控制端點。

USB 模塊通過 APB1 接口部件與 APB1 總線相連,APB1 接口部件包括以下部分:

?分組緩沖區:數據分組緩存在分組緩沖區中,它由分組緩沖接口控制并創建數據結構。應用軟件可以直接訪問該緩沖區。它的大小為 512 字節,由 256 個 16 位的字構成。

?仲裁器:該部件負責處理來自 APB1 總線和 USB 接口的存儲器請求。它通過向 APB1 提供較高的訪問優先權來解決總線的沖突,并且總是保留一半的存儲器帶寬供 USB 完成傳輸。它采用時分復用的策略實現了虛擬的雙端口 SRAM,即在 USB 傳輸的同時,允許應用程序訪問存儲器。此策略也允許任意長度的多字節 APB1 傳輸。

?寄存器映射單元:此部件將 USB 模塊的各種字節寬度和位寬度的寄存器映射成能被 APB1 尋址的 16 位寬度的內存集合。

?APB1 封裝:此部件為緩沖區和寄存器提供了到 APB1 的接口,并將整個 USB 模塊映射到 APB1地址空間。

?中斷映射單元:將可能產生中斷的 USB 事件映射到三個不同的 NVIC 請求線上:

······? USB 低優先級中斷(通道 20):可由所有 USB 事件觸發(正確傳輸,USB 復位等)。固件在處理中斷前應當首先確定中斷源。

······? USB 高優先級中斷(通道 19):僅能由同步和雙緩沖批量傳輸的正確傳輸事件觸發,目的是保證最大的傳輸速率。

······? USB 喚醒中斷(通道 42):由 USB 掛起模式的喚醒事件觸發。

4 編程中需要考慮的問題

在下面的章節中,將介紹 USB 模塊和應用程序之間的交互過程,有利于簡化應用程序的開發。

4.1 系統復位和上電復位

發生系統復位或者上電復位時,應用程序首先需要做的是提供 USB 模塊所需要的時鐘信號,然后清除復位信號,使程序可以訪問 USB 模塊的寄存器。復位之后的初始化流程如下所述:

首先,由應用程序激活寄存器單元的時鐘,再配置設備時鐘管理邏輯單元的相關控制位,清除復位信號。

其次,必須配置 CNTR 寄存器的 PDWN 位用以開啟 USB 收發器相關的模擬部分,這點需要特別的處理。此位能打開為端點收發器供電的內部參照電壓。由于打開內部電壓需要一段啟動時間(數據手冊中的 tSTARTUP),在此期間內 USB收發器處于不確定狀態,所以在設置 CNTR寄存器的 PDWN后必需等待一段時間之后,才能清除 USB 模塊的復位信號(清除 CNTR 寄存器上的 FRES 位),和ISTR 寄存器的內容,以便在使能其他任何單元的操作之前清除未處理的假中斷標志。

最后,應用程序需要通過配置設備時鐘管理邏輯的相應控制位來為 USB 模塊提供標準所定義的48MHz 時鐘。

當系統復位時,應用程序應該初始化所有需要的寄存器和分組緩沖區描述表,使 USB 模塊能夠產生正常的中斷和完成數據傳輸。所有與端點無關的寄存器需要根據應用的需求進行初始化(比如中斷使能的選擇,分組緩沖區地址的選擇等)。接下來按照 USB 復位處理(參見下段)。

USB 復位(RESET 中斷)

發生 USB 復位時,USB 模塊進入前面章節中描述過的系統復位狀態:所有端點的通信都被禁止(USB 模塊不會響應任何分組)。在 USB 復位后,USB 模塊被使能,同時地址為 0 的默認控制端點(端點 0)也需要被使能。這可以通過配置 USB_DADDR 寄存器的 EF 位,EP0R 寄存器和相關的分組緩沖區來實現。

在 USB 設備的枚舉階段,主機將分配給設備一個唯一的地址,這個地址必須寫入USB_DADDR 寄存器的 ADD[6:0]位中,同時配置其他所需的端點。

當復位中斷產生時,應用程序必需在中斷產生后的 10ms 之內使能端點 0 的傳輸。

分組緩沖區的結構和用途

每個雙向端點都可以接收或發送數據。接收到的數據存儲在該端點指定的專用緩沖區內,而另一個緩沖區則用于存放待發送的數據。對這些緩沖區的訪問由分組緩沖區接口模塊實現,它提出緩沖區訪問請求,并等待確認信息后返回。

為防止產生微控制器與 USB 模塊對緩沖區的訪問沖突,緩沖區接口模塊使用仲裁制,使 APB1 總線的一半周期用于微控制器的訪問,另一半保證 USB模塊的訪問。這樣,微控制器和 USB 模塊對分組緩沖區的訪問如同對一個雙端口 SRAM 的訪問,即使微控制器連續訪問緩沖區,也不會產生訪問沖突。USB 模塊使用固定的時鐘,按照 USB 標準,此時鐘頻率被固定為 48MHz。APB1 總線的時鐘可以大于或者小于這個頻率。

注意: 為滿足 USB 數據傳輸率和分組緩沖區接口的系統需求,APB1 總線時鐘的頻率必須大于 8MHz,以避免數據緩沖區溢出或不滿每個端點對應于兩個分組緩沖區(一般一個用于發送,另一個用于接收)。這些緩沖區可以位于整個分組存儲區的任意位置,因為它們的地址和長度都定義在緩沖區描述表中,而緩沖區描述表也同樣位于分組緩沖區中,其地址由 USB_BTABLE 寄存器確定。緩沖區描述表的每個表項都關聯到一個端點寄存器,它由 4 個 16 位的字組成,因此緩沖區描述表的起始地址按 8 字節對齊(寄存器的最低 3 位總是'000')。第 21.5.3 節詳細介紹緩沖區描述表表項。如果是非同步非雙緩沖的單向端點,只需要一個分組緩沖區(即發送方向上的分組緩沖區)。其他未用到的端點或某個未使用的方向上的緩沖區描述表項可以用于其他用途。

wKgZO2g4BkaAMVaCAAPLK_KKDdM265.png

分組緩沖區對應的緩沖區描述表項定位

不管是接收還是發送,分組緩沖區都是從底部開始使用的。USB 模塊不會改變超出當前分配到的緩沖區區域以外的其他緩沖區的內容。如果緩沖區收到一個比自己大的數據分組,它只會接收最大為自身大小的數據,其他的丟掉,即發生了所謂的緩沖區溢出異常。

端點初始化

初始化端點的第一步是把適當的值寫到 ADDRn_TX 或 ADDRn_RX 寄存器中,以便 USB 模塊能找到要傳輸的數據或準備好接收數據的緩沖區。USB_EPnR 寄存器的 EP_TYPE 位確定端點的基本類型,EP_KIND 位確定端點的特殊特性。作為發送方,需要設置 USB_EPnR 寄存器的 STAT_TX 位來使能端點,并配置 COUNTn_TX 位決定發送長度。作為接收方,需要設置 STAT_RX 位來使能端點,并且設置 BL_SIZE 和 NUM_BLOCK 位,確定接收緩沖區的大小,以檢測緩沖區溢出的異常。

對于非同步非雙緩沖批量傳輸的單向端點,只需要設置一個傳輸方向上的寄存器。一旦端點被使能,應用程序就不能再修改 USB_EPnR 寄存器的值和 ADDRn_TX/ADDRn_RX,COUNTn_TX/COUNTn_RX 所在的位置,因為這些值會被硬件實時修改。當數據傳輸完成時,CTR 中斷會產生,此時上述寄存器可以被訪問,并重新使能新的傳輸。

IN 分組(用于數據發送)

當接收到一 IN 令牌分組時,如果接收到的地址和一個配置好的端點地址相符合的話,USB 模塊將會根據緩沖區描述表的表項,訪問相應的 ADDRn_TX 和 COUNTn_TX 寄存器,并將這些寄存器中的數值存儲到內部的 16 位寄存器 ADDR 和 COUNT(應用程序無法訪問)中。此時,USB 模塊開始根據 DTOG_TX 位發送 DATA0 或 DATA1 分組,并訪問緩沖區(請參考'分組緩沖區的結構和用途'段落)。

在 IN 分組傳輸完畢之后,從緩沖區讀到的第一個字節將被裝載到輸出移位寄存器中,并開始發送。最后一個數據字節發送完成之后,計算好的 CRC 將被發送。如果收到的分組所對應的端點是無效的,將根據 USB_EPnR 寄存器上的 STAT_TX 位發送 NAK 或 STALL 握手分組而不發送數據。

ADDR 內部寄存器被用作當前緩沖區的指針,COUNT 寄存器用于記錄剩下未傳輸的字節數。USB總線使用低字節在先的方式傳輸從緩沖區中讀出的數據。數據從 ADDRn_TX 指向的數據分組緩沖區開始讀取,長度為 COUNTn_TX/2 個字。如果發送的數據分組為奇數個字節,則只使用最后一個字的低 8 位。

在接收到主機響應的 ACK 后,USB_EPnR 寄存器的值有以下更新:DTOG_TX 位被翻轉,STAT_TX位為'10',使端點無效,CTR_TX 位被置位。應用程序需要通過 USB_ISTR 寄存器的 EP_ID 和 DIR 位識別產生中斷的 USB 端點。CTR_TX 事件的中斷服務程序需要首先清除中斷標志位,然后準備好需要發送的數據緩沖區,更新 COUNTn_TX 為下次需要傳輸的字節數,最后再設置 STAT_TX 位為'11'(端點有效),再次使能數據傳輸。

當 STAT_TX 位為'10'時(端點為 NAK 狀態),任何發送到該端點的 IN 請求都會被 NAK,USB 主機會重發 IN 請求直到該端點確認請求有效。上述操作過程是必需遵守的,以避免丟失緊隨上一次 CTR 中斷請求的下一個 IN 傳輸請求。

OUT 分組和 SETUP 分組(用于數據接收)

USB 模塊對這兩種分組的處理方式基本相同;對 SETUP 分組的特殊處理將在下面關于控制傳輸部分詳細說明。當接收到一個 OUT 或 SETUP 分組時,如果地址和某個有效端點的地址相匹配,USB模塊將訪問緩沖區描述表,找到與該端點相關的 ADDRn_RX 和 COUNTn_RX 寄存器,并將ADDRn_RX寄存器的值保存在內部 ADDR 寄存器中。

同時,COUNT 會被被復位,從 COUNTn_RX中讀出的 BL_SIZE 和 NUM_BLOCK 的值用于初始化內部 16 位寄存器 BUF_COUNT,該寄存器用于檢測緩沖區溢出(所有的內部寄存器都不能被應用程序訪問)。USB 模塊將隨后收到的數據按字方式組織(先收到的為低字節),并存儲到 ADDR 指向的分組緩沖區中。同時,BUF_COUNT 值自動遞減,COUNT 值自動遞增。當檢測到數據分組的結束信號時,USB 模塊校驗收到 CRC 的正確性。如果傳輸中沒有任何錯誤發生,則發送 ACK握手分組到主機。即使發生 CRC錯誤或者其他類型的錯誤(位填充,幀錯誤等),數據還是會被保存到分組緩沖區中,至少會保存到發生錯誤的數據點,只是不會發送 ACK 分組,并且 USB_ISTR 寄存器的 ERR 位將會置位。在這種情況下,應用程序通常不需要干涉處理,USB 模塊將從傳輸錯誤中自動恢復,并為下一次傳輸做好準備。如果收到的分組所對應的端點沒有準備好,USB 模塊將根據 USB_EPnR 寄存器的 STAT_RX 位發送 NAK 或 STALL 分組,數據將不會被寫入接收緩沖區。

ADDRn_RX 的值決定接收緩沖區的起始地址,長度由包含 CRC 的數據分組的長度(即有效數據長度+2)決定,但不能超過 BL_SIZE 和 NUM_BLOCK 所定義的緩沖區的長度。如果接收到的數據分組的長度超出了緩沖區的范圍,超過范圍的數據不會被寫入緩沖區,USB 模塊將報告緩沖區發生溢出,并向主機發送 STALL 握手分組,通知此次傳輸失敗,也不產生中斷。

如果傳輸正確完成,USB 模塊將發送 ACK 握手分組,內部的 COUNT 寄存器的值會被復制到相應的COUNTn_RX 寄存器中,BL_SIZE 和 NUM_BLOCK 的值保持不變,也不需要重寫。USB_EPnR 寄存器按下列方式更新:DTOG_RX 位翻轉,STAT_RX=10(NAK)使端點無效,CTR_RX 位置位(如果 CTR中斷已使能,將觸發中斷)。如果傳輸過程中發生了錯誤或者緩沖區溢出,前面所列出的動作都不會發生。

CRT 中斷發生時,應用程序需要首先根據 USB_ISTR 寄存器的 EP_ID 和 DIR 位識別是哪個端點的中斷請求。在處理 CTR_RX 中斷事件時,應用程序首先要確定傳輸的類型(根據 USB_EPnR寄存器的 SETUP 位),同時清除中斷標志位,然后讀相關的緩沖區描述表表項指向的 COUNTn_RX寄存器,獲得此次傳輸的總字節數。處理完接收到的數據后,應用程序需要將 USB_EPnR 中的STAT_RX位置成'11',使能下一次的的傳輸。當 STAT_RX位為'10'時(NAK),任何一個發送到端點上的 OUT 請求都會被 NAK,PC 主機將不斷重發被 NAK 的分組,直到收到端點的 ACK 握手分組。以上描述的操作次序是必需遵守的,以避免丟失緊隨上一個 CTR 中斷的另一個 OUT 分組請求。

控制傳輸

控制傳輸由 3 個階段組成,首先是主機發送 SETUP 分組的 SETUP 階段,然后是主機發送零個或多個數據的數據階段,最后是狀態階段,由與數據階段方向相反的數據分組構成。SETUP 傳輸只發生在控制端點,它非常類似于 OUT 分組的傳輸過程。使能 SETUP 傳輸除了需要分別初始化DTOG_TX 位為'1',DTOG_RX 位為'0'外,還需要設置 STAT_TX 位和 STAT_RX 位為 10(NAK),由應用程序根據 SETUP 分組的相應字段決定后面的傳輸是 IN 還是 OUT。

控制端點在每次發生CTR_RX中斷時,都必須檢查USB_EPnR寄存器的SETUP位,以識別是普通的OUT分組還是SETUP分組。USB 設備應該能夠通過 SETUP 分組中的相應數據決定數據階段傳輸的字節數和方向,并且能在發生錯誤的情況下發送 STALL 分組,拒絕數據的傳輸。因此在數據階段,未被使用到的方向都應該被設置成 STALL,并且在開始傳輸數據階段的最后一個數據分組時,其反方向的傳輸仍設成 NAK 狀態,這樣,即使主機立刻改變了傳輸方向(進入狀態階段),仍然可以保持為等待控制傳輸結束的狀態。在控制傳輸成功結束后,應用程序可以把 NAK 變為 VALD,如果控制傳輸出錯,就改為 STALL。

此時,如果狀態分組是由主機發送給設備的,那么 STATUS_OUT 位(USB_EPnR 寄存器中的 EP_KIND)應該被置位,只有這樣,在狀態傳輸過程中收到了非零長度的數據分組,才會產生傳輸錯誤。在完成狀態傳輸階段后,應用程序應該清除 STATUS_OUT 位,并且將 STAT_RX 設為 VALID 表示已準備好接收一個新的命令請求,STAT_TX 則設為 NAK,表示在下一個 SETUP 分組傳輸完成前,不接受數據傳輸的請求。

USB 規范定義 SETUP 分組不能以非 ACK 握手分組來響應,如果 SETUP 分組傳輸失敗,則會引發下一個 SETUP 分組。因此,以 NAK 或 STALL 分組響應主機的 SETUP 分組是被禁止的。當 STAT_RX 位被設置為'01'(STALL)或'10'(NAK)時,如果收到 SETUP 分組,USB 模塊會接收分組,開始分組所要求的數據傳輸,并回送 ACK 握手分組。如果應用程序在處理前一個 CTR_RX 事件時USB 模塊又收到了 SETUP 分組(即 CTR_RX 仍然保持置位),USB 模塊會丟掉收到的 SETUP 分組,并且不回答任何握手分組,以此來模擬一個接收錯誤,迫使主機再次發送 SETUP 分組。這樣做是為了避免丟失緊隨一次 CTR_RX 中斷之后的又一個 SETUP 分組傳輸。

4.2 雙緩沖端點

USB 標準不僅為不同的傳輸模式定義了不同的端點類型,而且對這些數據傳輸所需要的系統要求做了描述。其中,批量端點適用于在主機 PC 和 USB 設備之間傳輸大批量的數據,因為主機可以在一幀內利用盡可能多的帶寬批量傳輸數據,使傳輸效率得到提高。然而,當 USB 設備處理前一次的數據傳輸時,又收到新的數據分組,它將回應 NAK 分組,使 PC 主機不斷重發同樣的數據分組,直到設備在可以處理數據時回應 ACK 分組。這樣的重傳占用了很多帶寬,影響了批量傳輸的速率,因此引入了批量端點的雙緩沖機制,提高數據傳輸率。

使用雙緩沖機制時,單向端點的數據傳輸將使用到該端點的接收和發送兩塊數據緩沖區。數據翻轉位用來選擇當前使用到兩塊緩沖區中的哪一塊,使應用程序可以在 USB 模塊訪問其中一塊緩沖區的同時,對另一塊緩沖區進行操作。例如,對一個雙緩沖批量端點進行 OUT 分組傳輸時,USB模塊將來自 PC 主機的數據保存到一個緩沖區,同時應用程序可以對另一個緩沖區中的數據進行處理(對于 IN 分組來說,情況是一樣的)。因為切換緩沖區的管理機制需要用到所有 4 個緩沖區描述表的表項,分別用來表示每個方向上的兩個緩沖區的地址指針和緩沖區大小,因此用來實現雙緩沖批量端點的 USB_EPnR 寄存器必需配置為單向。所以只需要設定 STAT_RX 位(作為雙緩沖批量接收端點)或者 STAT_TX 位(作為雙緩沖批量發送端點)。

如果需要一個雙向的雙緩沖批量端點,則須使用兩個 USB_EPnR 寄存器。為盡可能利用雙緩沖的優勢,達到較高的傳輸速率,雙緩沖批量端點的流量控制流程與其他端點的稍有不同。它只在緩沖區發生訪問沖突時才會設置端點為 NAK 狀態,而不是在每次傳輸成功后都將端點設為 NAK 狀態。

DTOG 位用來標識 USB 模塊當前所使用的儲存緩沖區。雙緩沖批量端點接收方向的緩沖區由DTOG_RX(USB_EPnR 寄存器的第 14 位)標識,而雙緩沖批量端點發送方向的緩沖區由DTOG_TX(USB_EPnR 寄存器的第 6 位)標識。同時,USB 模塊也需要知道當前哪個緩沖區正在被應用程序使用,以避免發生沖突。由于 USB_EPnR 寄存器中有 2 個 DTOG 位,而 USB 模塊只使用其中的一位來標識硬件所使用的緩沖區,因此,應用程序可使用另一位來標識當前正在使用哪個緩

沖區,這個新的標識被稱為 SW_BUF 位。下表列出了雙緩沖批量端點在實現發送和接收操作時,USB_EPNR 寄存器的 DTOG 位和 SW_BUF 位之間的關系。

雙緩沖批量端點緩沖區標識定義

緩沖區標識位 作為發送端點 作為接收端點
DTOG DTOG_TX (USB_EPnR 寄存器的第 6 位) DTOG_RX (USB_EPnR 寄存器的第 14 位)
SW_BUF USB_EPnR 寄存器的第 14 位 USB_EPnR 寄存器的第 6 位

USB 模塊當前使用的緩沖區由 DTOG 位標識,而應用程序所使用的緩沖區由 SW_BUF 位標識,這兩個位的標識方式相同,下表描述了這種標識方式。

雙緩沖批量端點的緩沖區使用標識

端點類型 DTOG 位 SW_BUF 位 USB 模塊使用的緩沖區 應用程序使用的緩沖區
IN 端點 0 1 ADDRn_TX_0/COUNTn_TX_0 ADDRn_TX_1/COUNTn_TX_1
OUT 端點 1 0 ADDRn_RX_1/COUNTn_RX_1 ADDRn_RX_0/COUNTn_RX_0
OUT 端點 0 0 無 (1) ADDRn_RX_0/COUNTn_RX_0
OUT 端點 1 1 無 (1) ADDRn_RX_0/COUNTn_RX_0

1.端點處于 NAK 狀態

可以通過以下方式設置一個雙緩沖批量端點:

?將 USB_EPnR 寄存器的 EP_TYPE 位設為'00',定義端點為批量端點

?將 USB_EPnR 寄存器的 EP_KIND 位設為'1',定義端點為雙緩沖端點

應用程序根據傳輸開始時用到的緩沖區來初始化 DTOG 和 SW_BUF 位;這需要考慮到這兩位的數據翻轉特性。設置好 DBL_BUF 位之后,每完成一次傳輸后,USB 模塊將根據雙緩沖批量端點的流量控制操作,并且持續到 DBL_BUF 變為無效為止。

每次傳輸結束,根據端點的傳輸方向,CTR_RX 位或 CTR_TX 位將會置為'1'。與此同時,硬件將設置相應的 DTOG 位,完全獨立于軟件來實現緩沖區交換機制。DBL_BUF 位設置后,每次傳輸結束時,雙緩沖批量端點的 STAT 位的取值不會像其他類型端點一樣受到傳輸過程的影響,而是一直保持為'11'(有效)。但是,如果在收到新的數據分組的傳輸請求時,USB 模塊和應用程序發生了緩沖區訪問沖突(即 DTOG 和 SW_BUF 為相同的值,),狀態位將會被置為'10'(NAK)。應用程序響應 CTR 中斷時,首先要清除中斷標志,然后再處理傳輸完成的數據。

應用程序訪問緩沖區之后,需要翻轉 SW_BUF 位,以通知 USB模塊該塊緩沖區已變為可用狀態。由此,雙緩沖批量傳輸的 NAK 分組的數目只由應用程序處理一次數據傳輸的快慢所決定:如果數據處理的時間小于 USB 總線上完成一次數據傳輸的時間,則不會發生重傳,此時,數據的傳輸率僅受限于 USB 主機。

應用程序也可以不考慮雙緩沖批量端點的特殊控制流程,直接在相應 USB_EPnR 寄存器的 STAT 位寫入非'11'的任何狀態,在這種情況下,USB 模塊將按照寫入的狀態執行流程而忽略緩沖器實際的使用情況。

4.3 同步傳輸

USB 標準定義了一種全速的需要保持固定和精確的數據傳輸率的傳輸方式:同步傳輸。同步傳輸一般用于傳輸音頻流、壓縮的視頻流等對數據傳輸率有嚴格要求的數據。一個端點如果在枚舉時被定義為“同步端點”,USB 主機則會為每個幀分配固定的帶寬,并且保證每個幀正好傳送一個IN 分組或者 OUT 分組(由端點傳輸方向確定分組類型)。為了滿足帶寬要求,同步傳輸中沒有出錯重傳;這也就意味著,同步傳輸在發送或接收數據分組之后,無握手協議,即不會發送 ACK 分組。同樣,同步傳輸只傳送 PID(分組 ID)為 DATA0 的數據包,而不會用到數據翻轉機制。

通過設置 USB_EPnR 寄存器 EP_TYPE 為'10',可以使其成為同步端點。同步端點沒有握手機制,根據 USB 標準中的說明,USB_EPnR 寄存器的 STAT_RX 位和 STAT_TX 位分別只能設成'00'(禁止)和'11'(有效)。同步傳輸通過實現雙緩沖機制來簡化軟件應用程序開發,它同樣使用兩個緩沖區,以確保在 USB 模塊使用其中一塊緩沖區時,應用程序可以訪問另外一塊緩沖區。USB 模塊使用的緩沖區根據不同的傳輸方向,由不同的 DTOG 位來標識。(同一寄存器中的DTOG_RX 位用來標識接收同步端點,DTOG_TX 位用來標識發送同步端點),見下表。

步端點的緩沖區使用標識同

端點類型 USB 模塊使用的緩沖區 應用程序使用的緩沖區
IN 端點 0 ADDRn_TX_0/COUNTn_TX_0 ADDRn_TX_1/COUNTn_TX_1
IN 端點 1 ADDRn_TX_1/COUNTn_TX_1 ADDRn_TX_0/COUNTn_TX_0
OUT 端點 0 ADDRn_RX_0/COUNTn_RX_0 ADDRn_RX_1/COUNTn_RX_1
OUT 端點 1 ADDRn_RX_1/COUNTn_RX_1 ADDRn_RX_0/COUNTn_RX_0

與雙緩沖批量端點一樣,一個 USB_EPnR 寄存器只能處理同步端點單方向的數據傳輸,如果要求同步端點在兩個傳輸方向上都有效,則需要使用兩個 USB_EPnR 寄存器。應用程序需要根據首次傳輸的數據分組來初始化 DTOG 位;它的取值還需要考慮到 DTOG_RX 或DTOG_TX 兩位的數據翻轉特性。每次傳輸完成時,USB_EPnR 寄存器的 CTR_RX 位或 CTR_TX 位置位。與此同時,相關的 DTOG 位由硬件翻轉,從而使得交換緩沖區的操作完全獨立于應用程序。傳輸結束時,STAT_RX 或 STAT_TX 位不會發生變化,因為同步傳輸沒有握手機制,所以不需要任何流量控制,而一直設為'11'(有效)。同步傳輸中,即使 OUT 分組發生 CRC 錯誤或者緩沖區溢出,本次傳輸仍被看作是正確的,并且可以觸發 CTR_RX 中斷事件;但是,發生 CRC 錯誤時硬件會設置 USB_ISTR 寄存器的 ERR 位,提醒應用程序數據可能損壞。

4.4 掛起/恢復事件

USB 標準中定義了一種特殊的設備狀態,即掛起狀態,在這種狀態下 USB 總線上的平均電流消耗不超過 500uA。這種電流限制對于由總線供電的 USB 設備至關重要,而自供電的設備則不需要嚴格遵守這樣的電流消耗限制。USB 主機以 3 毫秒內不發送任何信號標志進入掛起狀態。通常情況下 USB 主機每毫秒會發送一個 SOF,當 USB 模塊檢測到 3 個連續的 SOF 分組丟失事件即可判定主機發出了掛起請求,接著它會置位 SB_ISTR 寄存器的 SUSP 位,以觸發掛起中斷。USB 設備進入掛起狀態之后,將由“喚醒”序列喚醒。所謂的“喚醒”序列,可以由 USB 主機發起,也可以由 USB設備本身觸發;但是,只有 USB 主機可以結束“喚醒”序列。

被掛起的 USB 模塊必須至少還具備檢測 RESET 信號的功能,它會將其當作一次正常的復位操作來執行。實際的掛起操作過程對于不同的 USB 設備來說是不同的,因為需要不同的操作來降低電源消耗。下面描述了一起典型的掛起操作,重點介紹應用程序如何響應 USB 模塊的 SUSP 信號。

將 USB_CNTR 寄存器的 FSUSP 置為'1',這將使 USB 模塊進入掛起狀態。USB 模塊一旦進入掛起狀態,對 SOF 的檢測立刻停止,以避免在 USB 掛起時又發生新的 SUSP 事件。

消除或減少 USB 模塊以外的其他模塊的靜態電流消耗。

將 USB_CNTR 寄存器的 LP_MODE 位置為'1',這將消除模擬 USB 收發器的靜態電流消耗,但仍能檢測到喚醒信號。

可以選擇關閉外部振蕩器和設備的 PLL,以停止設備內部的任何活動。當設備處于掛起狀態時發生 USB 事件,該設備會被喚醒,并需要調用“喚醒”例程來恢復系統時鐘,和 USB 數據傳輸。如果喚醒設備的是 USB 復位操作,則應該保證喚醒的過程不要超過 10 毫秒(參見“USB 協議規范”)。USB 模塊處于掛起狀態時,喚醒或復位事件需要清除 USB_CNTR 寄存器的 LP_MODE 位。

即使喚醒事件可以立刻觸發一個 WKUP 中斷事件,但由于恢復系統時鐘需要比較長的延遲時間,處理 WKUP 中斷的中斷服務程序必須非常小心;為了減短系統喚醒的時間,建議將喚醒代碼直接寫在掛起代碼后面,這樣就可以在系統時鐘重啟后迅速進入喚醒代碼中執行。為防止或減少 ESD 等干擾意外地喚醒系統(從掛起模式退出是一個異步事件),在掛起過程中數據線被過濾,濾波寬度大約為 70nS。下面是喚醒操作的過程:

啟動外部振蕩器和設備的 PLL(此項可選)。

清零 USB_CNTR 寄存器的 FSUSP 位。

USB_FNR 寄存器的 RXDP 和 RXDM 位可以用來判斷是什么觸發了喚醒事件,如表 124 所示,它還同時列出了各種情況軟件應該采取的操作。如果需要的話,可以通過檢測這兩位變成'10'(代表空閑總線狀態)的時間來知道喚醒或復位事件的結束。此外,在復位事件結束時,USB_ISTR 寄存器的 RESET 位被置為'1',如果 RESET 中斷被使能,就會產生中斷。此中斷應該按正常的復位操作處理。

喚醒事件檢測

[RXDP, RXDM] 的狀態 喚醒事件 應用程序應執行的操作
00 復位
10 無 (總線干擾) 恢復到掛起狀態
01 恢復掛起
11 未定義的值 (總線干擾) 恢復到掛起狀態

設備可能不是被與 USB 模塊相關的事件喚醒的(例如一個鼠標的移動可喚醒整個系統)。在這種情況下,先將 USB_CNTR 寄存器的 RESUME 位置為'1',然后在 1ms-15ms 之間再把它清為 0 可以啟動喚醒序列(這個間隔可以用 ESOF 中斷來實現,該中斷在內核正常運行時每 1ms 發生一次)。RESUME 位被清零后,喚醒過程將由主機 PC 完成,可以利用 USB_FNR 寄存器的 RXDP 和 RXDM 位來判斷喚醒是否完成。

注意:只有在 USB 模塊被設置為掛起狀態時(設置 USB_CNTR 寄存器的 FSUSP 位為'1'),才可以設置 RESUME 位。

5 例程設計

5.1 CompositeEquipmentHID&VCP

該程序是一個基于W55MH32微控制器的USB復合設備固件,結合了虛擬串口(VCP)和HID功能,并通過USART輸出調試信息。以下是程序設計的總結:

1. 系統初始化

時鐘配置:使用外部高速時鐘(HSE)作為PLL輸入,倍頻至目標頻率(如HSE 8MHz ×27 = 216MHz)。配置AHB、APB1、APB2總線時鐘分頻,優化外設時鐘。啟用內部低速(LSI)和高速(HSI)時鐘源,可能供其他外設使用。

USART初始化:配置USART1(PA9-TX, PA10-RX),波特率115200,用于調試信息輸出。重定向printf至USART,便于通過串口打印系統狀態。

2. USB功能配置

USB設備初始化:設置USB時鐘(Set_USBClock)和中斷(USB_Interrupts_Config)。初始化USB協議棧(USB_Init),使能DP上拉電阻(DP_PUUP=1)以宣告設備連接。

復合設備處理:主循環監控USB連接狀態(bDeviceState),狀態變化時通過串口通知用戶。

當USB配置成功(CONFIGURED狀態)時,檢測接收緩沖區(Receive_Buffer_port)是否有數據,并通過CDC接口回傳數據(CDC_Send_DATA)。

3.數據通信流程

// 主循環中的數據通信處理
while (1)
{
    // 當USB設備處于已配置狀態(與主機建立連接)
    if (bDeviceState == CONFIGURED)
    {
        // 檢查接收緩沖區是否有數據且上次發送已完成
        if (Receive_length_port != 0 && packet_sent == 1)
        {
            // 通過USB CDC(虛擬串口)發送數據
            CDC_Send_DATA((unsigned char *)Receive_Buffer_port, Receive_length_port);
            
            // 重置接收緩沖區狀態
            Receive_length_port = 0;
            
            // 重新使能端點接收數據(準備下一次接收)
            SetEPRxValid(ENDP7);
        }
    }
    
    // 檢測USB連接狀態變化
    if (usbstatus != bDeviceState)
    {
        usbstatus = bDeviceState;  // 更新狀態
        
        // 打印連接狀態變化信息(調試用)
        if (usbstatus == CONFIGURED)
        {
            printf("USB connection successfuln");
        }
        else
        {
            printf("USB disconnectedn");
        }
    }
}

// USB中斷服務函數(示例,通常在其他文件中實現)
void USB_LP_CAN1_RX0_IRQHandler(void)
{
    USB_Istr();  // USB中斷處理主函數
}

// 端點數據接收回調函數(示例)
void EP7_IN_Callback(void)
{
    packet_sent = 1;  // 標記發送完成
}

void EP6_OUT_Callback(void)
{
    // 從端點緩沖區讀取數據到應用緩沖區
    Receive_length_port = USB_SIL_Read(EP6, Receive_Buffer_port);
    
    // 標記接收到新數據
    new_data_received = 1;
}

CDC數據傳輸:接收數據通過USB端點中斷填充至緩沖區,主循環檢測到數據后發送。使用SetEPRxValid(ENDP7)重新使能接收端點,準備下一次數據傳輸。

調試輸出:系統啟動時通過USART輸出時鐘配置信息(SYSCLK、HCLK等)。USB連接狀態變化時打印提示信息,便于調試設備狀態。

4. 關鍵代碼設計

時鐘配置函數(RCC_ClkConfiguration):通過HSE和PLL提供高精度系統時鐘,確保USB和USART穩定工作。

USART重定向:SER_PutChar和fputc實現字符發送,支持printf格式化輸出。

USB中斷與輪詢結合:中斷處理底層數據傳輸,主循環輪詢狀態及處理應用層邏輯。

6 下載驗證

6.1 CompositeEquipmentHID&VCP

現象描述:

?上電后,USART1立即輸出系統時鐘信息,包括SYSCLK(如216MHz)HCLK、PCLK1/2等。

?插入USB線后,主機識別到復合設備(VCP + HID),設備管理器中顯示虛擬串口(如“USB Serial Device (COMx)”)和HID設備。

?USART打印“USB connection successful”。

?通過串口工具(如PuTTY)向虛擬串口發送數據,設備立即回顯相同數據。

?USB斷開時,USART打印“USB disconnected”。

wKgZPGg4BkaAPY-hAAHJTttpR6Y741.png

WIZnet 是一家無晶圓廠半導體公司,成立于 1998 年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應用中的嵌入式互聯網設備。

WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。

香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    8136

    瀏覽量

    270650
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    「正點原子Linux連載」第二十二章串口格式化函數移植實驗

    1)實驗平臺:正點原子Linux開發板2)摘自《正點原子I.MX6U嵌入式Linux驅動開發指南》關注官方微信號公眾號,獲取更多資料:正點原子第二十二章串口格式化函數移植實驗上一實驗我們實現了
    發表于 12-28 15:42

    HarmonyOS內核源碼分析(下)

    是操作系統的基本時間單位第十九章 CPU是韋小寶,有哪七個老婆第二十章 全盤解剖系統調用實現過程第二十一章 ARM 37個寄存器一網打盡, 不再神秘第二十二章 社會很單純 , 復雜的是人第二十
    發表于 04-02 15:56

    【傾心力作!】i.MX8MM嵌入式linux開發指南+全覆蓋開發資料

    自己的命令第十九章 Linux工具之make工具和makefile 文件第二十章 makefile基本語法(上)第二十一章 makefile基本語法(下)第二十二章 安裝VMware Tool工具
    發表于 02-11 10:27

    火力發電廠水汽分析方法 第二十二部分:化學耗氧量的測定(高錳

    火力發電廠水汽分析方法 第二十二部分:化學耗氧量的測定(高錳酸鉀法) Analytical methods of steam and water in power plants Part
    發表于 06-08 12:14 ?23次下載

    實時頻譜儀原理及操作指南

    實時頻譜儀原理及操作指南:第十八章顯示行.233第十九章 W-CDMA 下行分析儀(選件22).236第二十章 W-CDMA 上行分析253第二十一章 文件操作.268第二十二章 文件格式.276
    發表于 10-17 17:37 ?0次下載

    第二十二講 同步時序邏輯電路的分析方法

    第二十二講 同步時序邏輯電路的分析方法 內容提要7.1 概述一、時序電路的定義二、電路構成三、分類:1 同步2 異
    發表于 03-30 16:26 ?5482次閱讀
    <b class='flag-5'>第二十二</b>講 同步時序邏輯電路的分析方法

    模擬電路網絡課件 第二十二節:功率放大電路的一般問題

    模擬電路網絡課件 第二十二節:功率放大電路的一般問題 5.1 功率放大電路的一般問題 一、功率放大電路的定義
    發表于 09-17 11:05 ?852次閱讀

    第二十二屆高交會深圳開幕 3300多家展商亮相

    11日,以科技改變生活,創新驅動發展為主題的第二十二屆中國國際高新技術成果交易會在深圳開幕。3300多家海內外展商攜帶逾萬個科技創新項目亮相。 本屆高交會將持續至11月15日,安排有展覽、論壇
    的頭像 發表于 11-12 08:44 ?2437次閱讀

    2020第二十二屆高交會助力科技領域雙循環

    11月11日,第二十二屆中國國際高新技術成果交易會(下稱高交會)在深圳拉開大幕,國內外優秀企業、創客、投融資機構以及專家學者將共聚一堂,共同梳理未來新機遇。 觀眾體驗新一代智能頭盔 以科技創新驅動
    發表于 11-12 10:56 ?637次閱讀

    第二十二屆高交會如期而至,共話云計算行業發展

    11 月 11 日,第二十二屆高交會如期而至。本屆高交會歷時 5 天,以科技改變生活,創新驅動發展為主題。在今年高交會中,特設WEB 3.0 中國峰會,共話互聯網新技術、大數據、分布式存儲等話題
    的頭像 發表于 11-13 11:15 ?1596次閱讀

    第二十二屆高交會圓滿落幕,極視角與您明年相約

    2020年11月15日,以科技改變生活,創新驅動發展為主題的第二十二屆中國國際高新技術成果交易會(簡稱高交會)在深圳會展中心落下帷幕。 極視角作為人工智能企業,攜算法商城、極市與極星兩大底層引擎平臺
    的頭像 發表于 11-24 10:34 ?1408次閱讀

    美高電子推出高性能迷你主機,亮相深圳第二十二屆高交會

    2020年11月11日-15日,一年一度的科技盛宴第二十二屆中國國際高新技術成果交易會(簡稱高交會)以科技改變生活 創新驅動發展為主題于深圳會展中心舉辦,展覽總面積達到12萬平方米以上。美高電子推出
    的頭像 發表于 11-27 15:15 ?1585次閱讀

    普渡機器人亮相第二十二屆中國美食節成為全場焦點

    6月29日,第二十二屆中國美食節暨第五屆中國餐飲業供應鏈博覽會在哈爾濱盛大開幕。本次活動由中國飯店協會、黑龍江省商務廳、哈爾濱市政府主辦,旨在貫徹落實國家關于促進消費、激發消費潛能的政策要求,帶動
    的頭像 發表于 06-29 21:10 ?935次閱讀
    普渡機器人亮相<b class='flag-5'>第二十二</b>屆中國美食節成為全場焦點

    展會直擊 | 美格智能亮相IOTE 2024第二十二屆國際物聯網展·深圳站

    IOTE2024第二十二屆國際物聯網展·深圳站于2024年8月28日—30日在深圳國際會展中心(寶安)開展,美格智能攜最新的5G/4GAIoT模組與物聯網行業解決方案精彩亮相,持續為客戶帶來通信技術
    的頭像 發表于 08-29 11:52 ?749次閱讀
    展會直擊 | 美格智能亮相IOTE 2024<b class='flag-5'>第二十二</b>屆國際物聯網展·深圳站

    巍泰技術攜多款創新產品驚艷亮相 2024 第二十二屆物聯網展

    8月28-30日,為期三天的IOTE2024第二十二屆國際物聯網展在深圳國際會展中心圓滿落幕。在這場精彩紛呈的科技盛宴中,巍泰技術攜多款創新產品驚艷亮相,以其卓越的技術實力和創新的產品解決方案,成為
    的頭像 發表于 09-11 15:11 ?574次閱讀
    巍泰技術攜多款創新產品驚艷亮相 2024 <b class='flag-5'>第二十二</b>屆物聯網展