性價(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è)主控芯片外加少量的電容電阻便可,相對于51MCU+SL811/CH375的模塊,無論模塊尺寸還是成本都有著極大的優(yōu)勢。
● 可以是模塊提供,也可以是芯片提供(只需要簡單的幾個(gè)外圍元件就可以了)
具體參數(shù)可以下載數(shù)據(jù)手冊或者聯(lián)系銷售人員
基本不需要占用單片機(jī)系統(tǒng)的存儲空間,最少只需要幾個(gè)字節(jié)的RAM 和幾百字節(jié)的代碼。
下面就是一個(gè)很通用的臺灣的單片機(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ù)的長度
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
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://測試主程序
call spi_ini //初始化spi
b0mov rbank,#1 //發(fā)送U盤是否連接好命令
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 //寫入數(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號龍?zhí)├髲B306
http://www.chinamcu.com