標(biāo)題: PB375 U盤讀寫匯編程序 [打印本頁(yè)]

作者: lanxunlanya    時(shí)間: 2009-3-19 09:17
標(biāo)題: PB375 U盤讀寫匯編程序

PB375 U盤讀寫匯編程序

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

1.    功能
● 用于嵌入式系統(tǒng)/單片機(jī)讀寫U 盤、閃盤、閃存盤、USB 移動(dòng)硬盤、USB 讀卡器等。
● 支持符合USB 相關(guān)規(guī)范基于Bulk-Only 傳輸協(xié)議的各種U 盤/閃存盤/外置硬盤。
● 支持文件系統(tǒng)FAT12 和FAT16 及FAT32
● 文件操作功能:新建、刪除、讀寫數(shù)據(jù),打開關(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)讀寫操作U盤的代碼:

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        ; 寫入命令碼
mov            a,cmd
b0mov        rbank,#0
b0mov        epr_data,a
call        spi_send

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

b0mov        rbank,#1        ;寫入后續(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
由于程序太長(zhǎng)詳細(xì)地址:http://www.chinamcu.com/?page_id=53

歡迎垂詢

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






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