標(biāo)題: [下載]【最新】U盤(pán)讀寫(xiě)匯編程序 [打印本頁(yè)]

作者: lanxunlanya    時(shí)間: 2009-3-22 14:27
標(biāo)題: [下載]【最新】U盤(pán)讀寫(xiě)匯編程序

PB375 U盤(pán)讀寫(xiě)匯編程序

性價(jià)比超高的U盤(pán)讀寫(xiě)模塊-PB375,兼容CH375讀寫(xiě)操作

1.    功能
● 用于嵌入式系統(tǒng)/單片機(jī)讀寫(xiě)U 盤(pán)、閃盤(pán)、閃存盤(pán)、USB 移動(dòng)硬盤(pán)、USB 讀卡器等。
● 支持符合USB 相關(guān)規(guī)范基于Bulk-Only 傳輸協(xié)議的各種U 盤(pán)/閃存盤(pán)/外置硬盤(pán)。
● 支持文件系統(tǒng)FAT12 和FAT16 及FAT32
● 文件操作功能:新建、刪除、讀寫(xiě)數(shù)據(jù),打開(kāi)關(guān)閉文件等。
● SPI接口,支持3.3V電平
● 兼容CH375模塊的操作命令
● 單芯片解決方案,該模塊只需要一個(gè)主控芯片外加少量的電容電阻便可,相對(duì)于51MCU+SL811/CH375的模塊,無(wú)論模塊尺寸還是成本都有著極大的優(yōu)勢(shì)。
● 可以是模塊提供,也可以是芯片提供(只需要簡(jiǎn)單的幾個(gè)外圍元件就可以了)
具體參數(shù)可以下載數(shù)據(jù)手冊(cè)或者聯(lián)系銷售人員

基本不需要占用單片機(jī)系統(tǒng)的存儲(chǔ)空間,最少只需要幾個(gè)字節(jié)的RAM 和幾百字節(jié)的代碼。

下面就是一個(gè)很通用的臺(tái)灣的單片機(jī)(可以是holtek 松翰 義隆 富晶等)用匯編操作PB375實(shí)現(xiàn)讀寫(xiě)操作U盤(pán)的代碼:

USB_FAIL        EQU        0AAH
USB_SUCC        EQU        055H
TRY_TIMES        EQU        0FFH
CMD_DiskReady    EQU        071H
CMD_FileCreate    EQU        065H
CMD_ByteWrite        equ        07Ch
CMD_FileClose        equ        067h

//設(shè)置SPI  端口的輸入輸出
spi_ini:
nop
call    i2c_delay
b0bset    spi_sdo_mod
b0bset    spi_sck_mod
b0bset    spi_cs_mod
b0bclr    spi_sdi_mod
b0bset  spi_cs                ;not chose
b0bset    spi_sck
b0bclr    spi_sdo
b0bclr    spi_sdi

ret

/************************
SPI發(fā)一個(gè)字節(jié),同時(shí)讀一個(gè)字節(jié)
*************************/
spi_send:

nop
clr    epr_num
clr    spi_in
b0bclr    spi_sck
spi_write_bit:
b0bts0    epr_data_b
jmp    spi_write_h
b0bclr    spi_sdo
jmp    spi_read_com
spi_write_h:
b0bset    spi_sdo
spi_read_com:
call    i2c_delay
b0bclr    fc
rlcm        spi_in
b0bts0    spi_sdi
incms        spi_in

b0bclr    fc
b0bset    spi_sck
call    i2c_delay
b0bclr    spi_sck        ;sck=0,data variable
call    i2c_delay

rlcm    epr_data    ;prepare for next
incms    epr_num
nop
b0bts1    epr_num_b
jmp    spi_write_bit
call    i2c_delay

ret

//發(fā)送命令
spi_send_command:
b0bclr    spi_cs
b0mov        rbank,#1        ; 寫(xiě)入命令碼
mov            a,cmd
b0mov        rbank,#0
b0mov        epr_data,a
call        spi_send

b0mov        rbank,#1        ;寫(xiě)入后續(xù)參數(shù)的長(zhǎng)度
mov            a,len
b0mov        rbank,#0
b0mov        epr_data,a
call        spi_send

b0mov        rbank,#1        ;寫(xiě)入后續(xù)參數(shù)
mov            a,len
b0mov        rbank,#0
b0bts0    FZ
jmp            send_len_over            ;len=0
b0mov        temp,a
b0mov        Y,#1
b0mov        Z,#sendbuf

send_len_byte:
b0mov        a,@YZ
b0mov        rbank,#0
b0mov        epr_data,a
call        spi_send

b0mov        rbank,#0
incms        Z
nop
decms        temp
jmp            send_len_byte

send_len_over:
b0bset    spi_cs
call    i2c_delay

;check the status
mov            a,#TRY_TIMES
b0mov        rbank,#1
mov            trytime,a

check_status:
b0mov        rbank,#0
b0bclr    spi_cs
mov            a,#0ffh
b0mov        epr_data,a
call        spi_send

b0bset    spi_cs
call    i2c_delay

b0mov        a,spi_in
sub                a,#0ffh
b0bts0        FZ
jmp                wait_1ms        ;模塊操作尚未完成

b0mov        a,spi_in
sub                a,#00h
b0bts0        FZ
jmp                succ_quit_00        ;操作成功

fail_quit:
b0bset        spi_cs
mov                a,#USB_FAIL
b0mov            rbank,#1
mov                usb_reslt,a
b0mov            rbank,#0
ret

wait_1ms:        //延時(shí)
b0mov    z,#0f7h
b0mov    y,#0e3h        ;穩(wěn)定oscillator,40ms
delay_ms_02:
b0bset    fwdrst
nop
nop
incms    z
jmp    delay_ms_02
nop
incms    y
jmp    delay_ms_02

b0mov    rbank,#1
decms    trytime
jmp        check_status

jmp        fail_quit

succ_quit_00:
b0mov        rbank,#0
b0bclr    spi_cs
mov            a,#00h
b0mov        epr_data,a
call        spi_send

b0mov        a,spi_in
b0bts0        FZ
jmp            succ_quit

b0mov        temp,a
b0mov        Y,#1
b0mov        Z,#recvbuf

read_len_byte:
mov        a,#0
b0mov        rbank,#0
b0mov        epr_data,a
call        spi_send

b0mov        a,spi_in
b0mov        @YZ,a
b0mov        rbank,#0
incms        Z
nop
decms        temp
jmp            read_len_byte
succ_quit:
b0bset        spi_cs
mov                a,#USB_succ
b0mov            rbank,#1
mov                usb_reslt,a
b0mov            rbank,#0
ret

testusb://測(cè)試主程序
call             spi_ini                     //初始化spi
b0mov            rbank,#1                    //發(fā)送U盤(pán)是否連接好命令
mov                a,#CMD_DiskReady
mov                cmd,a
mov                a,#0
mov                len,a
b0mov            rbank,#0
call            spi_send_command
b0mov            rbank,#1
mov                a,usb_reslt
b0mov            rbank,#0
sub                a,#USB_succ
b0bts1        FZ
ret
;ok  diskread  ;sendbuf is 92+”TEST.DAT”            //創(chuàng)建文件”TEST.DAT”
b0mov            rbank,#0
b0mov            Y,#1
b0mov            Z,#sendbuf
mov                a,#92
b0mov            @yz,a
incms            Z
mov            a,#116
b0mov            @yz,a
incms            Z
mov                a,#101
b0mov            @yz,a
incms            Z
mov            a,#115
b0mov            @yz,a
incms            Z
mov            a,#116
b0mov            @yz,a
incms            Z
mov            a,#46
b0mov            @yz,a
incms            Z
mov            a,#100
b0mov            @yz,a
incms            Z
mov            a,#97
b0mov            @yz,a
incms            Z
mov            a,#116
b0mov            @yz,a
incms            Z

b0mov            rbank,#1
mov                a,#CMD_FileCreate           //創(chuàng)建文件命令
mov                cmd,a
mov                a,#10
mov                len,a
b0mov            rbank,#0
call            spi_send_command
b0mov            rbank,#1
mov                a,usb_reslt
b0mov            rbank,#0
sub                a,#USB_succ
b0bts1        FZ
ret

b0mov            rbank,#0
b0mov            Y,#1
b0mov            Z,#sendbuf
mov                a,#19
b0mov            @yz,a
incms            Z
mov            a,#33
b0mov            @yz,a
incms            Z
mov            a,#34
b0mov            @yz,a
incms            Z
mov            a,#35
b0mov            @yz,a
incms            Z
mov            a,#36
b0mov            @yz,a
incms            Z
mov            a,#37
b0mov            @yz,a
incms            Z
mov            a,#38
b0mov            @yz,a
incms            Z
mov            a,#39
b0mov            @yz,a
incms            Z
mov            a,#40
b0mov            @yz,a
incms            Z
mov            a,#41
b0mov            @yz,a

b0mov            rbank,#1
mov                a,#CMD_ByteWrite           //寫(xiě)入數(shù)據(jù)
mov                cmd,a
mov                a,#10
mov                len,a
b0mov            rbank,#0
call            spi_send_command

b0mov            rbank,#1
mov                a,#CMD_FileClose           //關(guān)閉文件
mov                cmd,a
mov                a,#1
mov                len,a
b0mov            rbank,#0
call            spi_send_command

ret

歡迎垂詢

電話:075529739852
地址:深圳市南山區(qū)高新中四道30號(hào)龍?zhí)├髲B306
http://www.chinamcu.com






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1