• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            USB系列之四:向U盤上寫數據

            在《USB系列之三》中,我們實現了一系列的SCSI命令,在這個系列中,我們要實現向U盤上寫扇區的命令,所以,本文相對比較容易,更多地是給出一個實現的源程序。

                在《USB系列之三》中,我們實現的SCSI命令有:INQUIRY、READ CAPACITY(10)、TEST UNIT READY、REQUEST SENSE、READ(10);都是一些讀出的命令,所以不會破壞U盤的內容,在文檔SBC-2的第29頁有一個SCSI命令的表,在這個表中列出了所有的命令,其TYPE為“M”的都是SCSI設備必須實現的命令,這些命令有:

            Num

            Command Name

            Operation Code

             Type

             Reference

             1

             FORMAT UNIT

             04h

             M

             SBC-2

             2

             INQUIRY

             12h

             M

             SPC-3

             3

             READ(6)

             08h

             M

             SBC-2

             4

             READ(10)

             28h

             M

             SBC-2

             5

             READ(16)

             88h

             M

             SBC-2

             6

             READ CAPACITY(10)

             25h

             M

             SBC-2

             7

             READ CAPACITY(16)

             9Eh/10h

             M

             SBC-2

             8

             REQUEST SENSE

             03h

             M

             SPC-3

             9

             SEND DIAGNOSTIC

             1Dh

             M

             SPC-3

             10

             TEST UNIT READY

             00h

             M

             SPC-3

             11

             WRITE(10)

             2Ah

             O

             SBC-2

                這里面最后的一個命令并不是SBC-2中要求強制實現的,而是可選的,但如果我們不去實現,U盤的操作將失色很多;我們不打算去實現序號為1、3、5、7和9的命令,READ(6)、READ(16)和READ(10)十分相似,只是LBA的長度不同而已,如果需要實現,參考READ(10)就可以了,FORMAT和SEND DIAGNOSTIC兩個命令對使用芯片的U盤來說沒有什么意義,當然對硬盤是有意義的,所以在本文中,我們只需要實現一個很重要的WRTE(10),向U盤上寫數據,我們需要準備一張沒有有用數據的U盤,因為我們要改變其中的內容。

                WRITE(10)源代碼下載地址:

                http://blog.hengch.com/source/usb-write.zip

                程序中,我們向《USB系列三》中的程序一樣,先reset,然后得到最大的LUN,這個步驟不是必須的,然后我們向device發出WRITE(10)命令,注意,這是一個OUT事務,所以,CBW_FLAGS=0X00而不是像以前一樣是0X80,發出WRITE(10)命令后,我們還要向device發送要寫入的數據,每次64個字節,一個扇區512字節需要啟動8個OUT事務,這個工作又函數putData完成,每次發送的64個字節我們分別寫入了0--63,程序中,我們把這些數據寫入到了LBA=100的扇區中,寫入后,我們在使用在《USB系列之三》中介紹過的READ(10)命令把相同的扇區讀出來,我們會看到我們所希望的結果,由于在讀之前,我們已經把buffer全部清為0了,所以我們有把握相信,我們讀到的數據是真實的。

                到這里,我們已經把控制U盤的主要命令都介紹完了,利用DOSUSB,我們已經有可能為U盤編寫一個簡單的驅動程序,但可能我們還不知道DOS下的驅動程序該如何寫,從下一篇文章開始,我們將暫時放下USB系列文章,介紹一下DOS下驅動程序的寫法。

            posted on 2010-11-24 14:10 wrh 閱讀(1218) 評論(0)  編輯 收藏 引用

            導航

            <2009年5月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            99久久国产主播综合精品| 亚洲精品无码专区久久久| 好久久免费视频高清| 2021久久国自产拍精品| 99久久免费国产精品热| 国产精品美女久久久免费| 久久亚洲国产成人影院网站 | 久久精品极品盛宴观看| 久久天天躁狠狠躁夜夜avapp| 国内高清久久久久久| 精品久久久久久久久午夜福利| 97精品伊人久久久大香线蕉| 久久精品国产男包| 国产精品久久久久乳精品爆| 奇米影视7777久久精品| 午夜精品久久影院蜜桃| 精品国产VA久久久久久久冰| 亚洲精品成人网久久久久久| 狠狠色狠狠色综合久久| 欧美国产精品久久高清| 久久91精品久久91综合| 久久夜色精品国产亚洲| 国产日韩欧美久久| 2021久久国自产拍精品| 久久久久亚洲AV无码网站| 欧美伊人久久大香线蕉综合69| 久久久久国产精品熟女影院| 精品国产99久久久久久麻豆| 亚洲欧洲久久av| 久久高清一级毛片| 精品视频久久久久| 国产99久久九九精品无码| 9久久9久久精品| 国产精品禁18久久久夂久| AV无码久久久久不卡蜜桃| 久久久午夜精品福利内容| 久久精品中文字幕第23页| 国内精品久久久久久久涩爱| 国产成人久久精品二区三区| 国产精品久久久久久福利漫画| 99久久无码一区人妻a黑|