做乙個U盤的學習路線

2022-03-27 13:32:17 字數 2726 閱讀 6379

最近想研究乙個u盤,然後順便熟悉一下usb協議。因為usb協議比較複雜, 常用的複雜外設除了wifi,ethernet,sdio和usb這些就是usb了,學習usb的時候肯定要拿乙個東西下手,所以簡單了解之後準備了下列資料:

1.《圈圈教你玩usb》。這本書比較經典,但是拿的晶元比較老了,在**上搜尋發現這本書配套的pdiusbd12有現成的獨立模組使用。因為手頭上正好有乙個stm32開發板,可以用來對接它。stm32之前用來對接紅外線後來被閒置(參考這篇 這時候正好用上。

左邊是**買的模組,中間是圈圈的書本,右邊是買書送的pcb,沒有用上。

2.《usb開發大全》,《linux那些事兒》這兩本書買了備用

3.usb一些相關資料報,和usb的系列spec,算作儲備。前期已經了解了一些usb的基本架構,學習起來可以再回顧下。

4.usb的抓包軟體,抓包硬體。抓包軟體抓到的包可能會漏掉一些東西,而且會加上一些系統呼叫,使用會模糊不清。而抓包軟體可以抓到真實的包,就像wifi的sniffer一樣,一定要看到真實的包才有標準答案,不然學習起來會迷路。usb的抓包器相對於邏輯分析儀比較昂貴,購買usb1.1協議的即可。

5.準備好你的耐心,因為這裡涉及多個協議,這是最重要的

因為選擇了stm32作為主體而不是51微控制器,所以**難免需要移植一下,這是乙個初期的障礙,但是評估起來問題不大。因為需要移植的是gpio相關的東西,所以只要注意一些細節就可以了。移植過程中遇到的乙個比較大的問題是,d12並口的gpio不要給它拉高,否則通訊會出錯。我之前使用的時候發現一直沒有通(通過並口讀取d12的硬體id),後來加入了邏輯分析儀之後竟然可以了,於是想到gpio的硬體問題,最後把上拉改成懸空就可以了。因為stm32的gpio的api有點繞,所以要仔細對待。

移植到stm32的hal**:

/*

* init gpioa as input or output

*/void gpioa_init(int

input)

void

hal_gpio_data_as_input()

void

hal_gpio_data_as_output()

u8 hal_gpio_read_data()/**

gpiob_6 = rd -- output

gpiob_7 = wr -- output

gpiob_8 = int -- input

gpiob_9 = a0 -- output

*/void

gpiob_init()/**

write one byte to gpioa0~gpio7

*/void hal_gpio_write_data(unsigned char

byte

)void hal_gpio_write_rd(int

val)

void hal_gpio_write_wr(int

val)

void hal_gpio_write_a0(int

val)

inthal_gpio_read_int()

void

hal_gpio_init()/**

pa0 ~ pa7 test pass

*/void

gpioa_test()

}

圈圈**裡面的中文太多了,出於強迫症給它整理格式、加入自定義的列印並且加上顏色。

使用的時候hid和usb-ttl的例子都沒問題,後面的u盤裡面就有一些問題了,這裡有一些scsi命令的響應是沒有的,手動給它新增上去,試過ubuntu14.04和win10都沒有通,經常卡在檔案系統的read(10)這裡,猜測是速度上不去,後面更換stm32自帶的usb試試看。目前成功的例子是linux2.6核心的板子成功給它掛載上去並且讀取到裡面的txt檔案。

對於u盤來說有包括scsi指令和fat檔案系統層的東西,這些都需要去了解,鞏固。

1.usb協議本身主要是要實現一些基本的描述符,告訴主機自己是誰,有哪些引數(類似sdio的cccr/fbr/cis),實際的資料傳輸流程是為上層協議做準備的。一開始可能對usb資料報本身比較感興趣,後續更多的問題存在於應用協議。

2.對於u盤來說要在usb基礎上了解scsi和fat檔案系統協議協議格式,重頭戲都是在這裡的。

3.usb可玩性比較高,可以實現標準的hid或者自定義單各種裝置。比如usb網絡卡和ch340這些模組都是自定義的vendor specific裝置。

目前還是有一些問題需要解決的

1.將圈圈的**寫死二進位制的方式全部改掉(包括usb的標準請求/scsi指令/fat格式),換成結構體的表示,手頭上有linux核心**和ecos的**,可以移植過來。光跑別人的**可能理解不深,自己重寫一遍才能深刻理解。

2.在stm32上跑通u盤的例子。目前stm32有了現成的u盤歷程,可以先移植過來看看效果,如果效果不好就將d12的**移植過來。

3.在windows和ubuntu上面調通u盤

4.stm32作為sdio host,做乙個usb讀卡器。

5.總結整理文件,形成自己的usb**庫

6.準備好耐心一步步積累吧

修乙個u盤

修乙個u盤,據說原本是電腦出問題了,檔案讀取不了,用這個u盤去試著複製資料,然後u盤也開始出問題了,現在的情況是嚴重發熱,然後無法讀取內部資料。先插電腦上看看吧。第一反應是彈框說無法識別 第二反應是急速的開始發燙,我還是先拔下來吧。在網上找找看解決辦法吧。這個比較靠譜 檢視u盤的主控型別 拆下來了,...

怎麼自己製作乙個U盤

首先來了解下u盤的構造 u盤可以分為四個組成部分 1.外殼 外殼很容易理解,網上有很多外殼可以買,可以自己製作,印上logo。2.pcb電路板 其實pcb電路板一般和主控是一體的,這裡單獨分出來是因為,有些技術強人自己設計pcb電路板,然後製作u盤。於是於此表示佩服。3.主控 u盤主控是u盤的計算 ...

如何把U盤的兩個盤或者多個盤合成乙個

1 插入u盤,匯出所有重要資料。2 右擊我的電腦,點管理開啟裝置管理器。3 在裝置管理器裡找到磁碟管理。4 在磁碟管理右側出現下圖 6 找到u盤,圖上是磁碟1。7 依次右擊每個分割槽,點選刪除卷。8 刪除所有分割槽後出現乙個未分配空間,右擊,新建簡單卷即可 擴充套件資料 ntfs對快閃儲存器壽命影響...