PB375 U盘读写汇编程序<br />性价比超高的U盘读写模块-PB375,兼容CH375读写操作<br /><br />1. 功能<br />● 用于嵌入式系统/单片机读写U 盘、闪盘、闪存盘、USB 移动硬盘、USB 读卡器等。<br />● 支持符合USB 相关规范基于Bulk-Only 传输协议的各种U 盘/闪存盘/外置硬盘。<br />● 支持文件系统FAT12 和FAT16 及FAT32<br />● 文件操作功能:新建、删除、读写数据,打开关闭文件等。<br />● SPI接口,支持3.3V电平<br />● 兼容CH375模块的操作命令<br />● 单芯片解决方案,该模块只需要一个主控芯片外加少量的电容电阻便可,相对于51MCU+SL811/CH375的模块,无论模块尺寸还是成本都有着极大的优势。<br />● 可以是模块提供,也可以是芯片提供(只需要简单的几个外围元件就可以了)<br />具体参数可以下载数据手册或者联系销售人员<br /><br />基本不需要占用单片机系统的存储空间,最少只需要几个字节的RAM 和几百字节的代码。<br /><br />下面就是一个很通用的台湾的单片机(可以是holtek 松翰 义隆 富晶等)用汇编操作PB375实现读写操作U盘的代码:<br /><br />USB_FAIL EQU 0AAH<br />USB_SUCC EQU 055H<br />TRY_TIMES EQU 0FFH<br />CMD_DiskReady EQU 071H<br />CMD_FileCreate EQU 065H<br />CMD_ByteWrite equ 07Ch<br />CMD_FileClose equ 067h<br /><br />//设置SPI 端口的输入输出<br />spi_ini:<br />nop<br />call i2c_delay<br />b0bset spi_sdo_mod<br />b0bset spi_sck_mod<br />b0bset spi_cs_mod<br />b0bclr spi_sdi_mod<br />b0bset spi_cs ;not chose<br />b0bset spi_sck<br />b0bclr spi_sdo<br />b0bclr spi_sdi<br /><br />ret<br /><br />/************************<br />SPI发一个字节,同时读一个字节<br />*************************/<br />spi_send:<br /><br />nop<br />clr epr_num<br />clr spi_in<br />b0bclr spi_sck<br />spi_write_bit:<br />b0bts0 epr_data_b<br />jmp spi_write_h<br />b0bclr spi_sdo<br />jmp spi_read_com<br />spi_write_h:<br />b0bset spi_sdo<br />spi_read_com:<br />call i2c_delay<br />b0bclr fc<br />rlcm spi_in<br />b0bts0 spi_sdi<br />incms spi_in<br /><br />b0bclr fc<br />b0bset spi_sck<br />call i2c_delay<br />b0bclr spi_sck ;sck=0,data variable<br />call i2c_delay<br /><br />rlcm epr_data ;prepare for next<br />incms epr_num<br />nop<br />b0bts1 epr_num_b<br />jmp spi_write_bit<br />call i2c_delay<br /><br />ret<br /><br />//发送命令<br />spi_send_command:<br />b0bclr spi_cs<br />b0mov rbank,#1 ; 写入命令码<br />mov a,cmd<br />b0mov rbank,#0<br />b0mov epr_data,a<br />call spi_send<br /><br />b0mov rbank,#1 ;写入后续参数的长度<br />mov a,len<br />b0mov rbank,#0<br />b0mov epr_data,a<br />call spi_send<br /><br />b0mov rbank,#1 ;写入后续参数<br />mov a,len<br />b0mov rbank,#0<br />b0bts0 FZ<br />jmp send_len_over ;len=0<br />b0mov temp,a<br />b0mov Y,#1<br />b0mov Z,#sendbuf<br /><br />send_len_byte:<br />b0mov a,@YZ<br />b0mov rbank,#0<br />b0mov epr_data,a<br />call spi_send<br /><br />b0mov rbank,#0<br />incms Z<br />nop<br />decms temp<br />jmp send_len_byte<br /><br />send_len_over:<br />b0bset spi_cs<br />call i2c_delay<br /><br />;check the status<br />mov a,#TRY_TIMES<br />b0mov rbank,#1<br />mov trytime,a<br /><br />check_status:<br />b0mov rbank,#0<br />b0bclr spi_cs<br />mov a,#0ffh<br />b0mov epr_data,a<br />call spi_send<br /><br />b0bset spi_cs<br />call i2c_delay<br /><br />b0mov a,spi_in<br />sub a,#0ffh<br />b0bts0 FZ<br />jmp wait_1ms ;模块操作尚未完成<br /><br />b0mov a,spi_in<br />sub a,#00h<br />b0bts0 FZ<br />jmp succ_quit_00 ;操作成功<br /><br />fail_quit:<br />b0bset spi_cs<br />mov a,#USB_FAIL<br />b0mov rbank,#1<br />mov usb_reslt,a<br />b0mov rbank,#0<br />ret<br /><br />wait_1ms: //延时<br />b0mov z,#0f7h<br />b0mov y,#0e3h ;稳定oscillator,40ms<br />delay_ms_02:<br />b0bset fwdrst<br />nop<br />nop<br />incms z<br />jmp delay_ms_02<br />nop<br />incms y<br />jmp delay_ms_02<br /><br />b0mov rbank,#1<br />decms trytime<br />jmp check_status<br /><br />jmp fail_quit<br /><br />succ_quit_00:<br />b0mov rbank,#0<br />b0bclr spi_cs<br />mov a,#00h<br />b0mov epr_data,a<br />call spi_send<br /><br />b0mov a,spi_in<br />b0bts0 FZ<br />jmp succ_quit<br /><br />b0mov temp,a<br />b0mov Y,#1<br />b0mov Z,#recvbuf<br /><br />read_len_byte:<br />mov a,#0<br />b0mov rbank,#0<br />b0mov epr_data,a<br />call spi_send<br /><br />b0mov a,spi_in<br />b0mov @YZ,a<br />b0mov rbank,#0<br />incms Z<br />nop<br />decms temp<br />jmp read_len_byte<br />succ_quit:<br />b0bset spi_cs<br />mov a,#USB_succ<br />b0mov rbank,#1<br />mov usb_reslt,a<br />b0mov rbank,#0<br />ret<br /><br />testusb://测试主程序<br />call spi_ini //初始化spi<br />b0mov rbank,#1 //发送U盘是否连接好命令<br />mov a,#CMD_DiskReady<br />mov cmd,a<br />mov a,#0<br />mov len,a<br />b0mov rbank,#0<br />call spi_send_command<br />b0mov rbank,#1<br />mov a,usb_reslt<br />b0mov rbank,#0<br />sub a,#USB_succ<br />b0bts1 FZ<br />ret<br />;ok diskread ;sendbuf is 92+”TEST.DAT” //创建文件”TEST.DAT”<br />b0mov rbank,#0<br />b0mov Y,#1<br />b0mov Z,#sendbuf<br />mov a,#92<br />b0mov @yz,a<br />incms Z<br />mov a,#116<br />b0mov @yz,a<br />incms Z<br />mov a,#101<br />b0mov @yz,a<br />incms Z<br />mov a,#115<br />b0mov @yz,a<br />incms Z<br />mov a,#116<br />b0mov @yz,a<br />incms Z<br />mov a,#46<br />b0mov @yz,a<br />incms Z<br />mov a,#100<br />b0mov @yz,a<br />incms Z<br />mov a,#97<br />b0mov @yz,a<br />incms Z<br />mov a,#116<br />b0mov @yz,a<br />incms Z<br /><br />b0mov rbank,#1<br />mov a,#CMD_FileCreate //创建文件命令<br />mov cmd,a<br />mov a,#10<br />mov len,a<br />b0mov rbank,#0<br />call spi_send_command<br />b0mov rbank,#1<br />mov a,usb_reslt<br />b0mov rbank,#0<br />sub a,#USB_succ<br />b0bts1 FZ<br />ret<br /><br />b0mov rbank,#0<br />b0mov Y,#1<br />b0mov Z,#sendbuf<br />mov a,#19<br />b0mov @yz,a<br />incms Z<br />mov a,#33<br />b0mov @yz,a<br />incms Z<br />mov a,#34<br />b0mov @yz,a<br />incms Z<br />mov a,#35<br />b0mov @yz,a<br />incms Z<br />mov a,#36<br />b0mov @yz,a<br />incms Z<br />mov a,#37<br />b0mov @yz,a<br />incms Z<br />mov a,#38<br />b0mov @yz,a<br />incms Z<br />mov a,#39<br />b0mov @yz,a<br />incms Z<br />mov a,#40<br />b0mov @yz,a<br />incms Z<br />mov a,#41<br />b0mov @yz,a<br /><br />b0mov rbank,#1<br />mov a,#CMD_ByteWrite //写入数据<br />mov cmd,a<br />mov a,#10<br />mov len,a<br />b0mov rbank,#0<br />call spi_send_command<br /><br />b0mov rbank,#1<br />mov a,#CMD_FileClose //关闭文件<br />mov cmd,a<br />mov a,#1<br />mov len,a<br />b0mov rbank,#0<br />call spi_send_command<br /><br />ret<br /><br />欢迎垂询<br /><br />电话:075529739852<br />地址:深圳市南山区**中四道30号龙泰利大厦306<br />http://www.chinamcu.com<br /> <br /> 相关链接:<a href='http://www.chinamcu.com/files/PB375DS1.pdf'>http://www.chinamcu.com/files/PB375DS1.pdf</a> |
|