3148|1

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

atmega16操作u盘读写模块PB375A例程 [复制链接]

atmega16操作u盘读写模块PB375A例程


在很多工程项目中,电子系统会采集或者生成一些数据需要保存。随着U盘的普及,系统中加入数据保存到U盘已经成为一种不错的选择。该例程就是利用 atmega16的单片机操作PB375A u盘读写模块写入一些数据到U盘中。操作简单,PB375A性价比高,成为很多低端U盘读写应用的重要选择。


PB375A简介

PB375A作为一款低成本的U盘读写单芯片,集成了USB HOST及FAT文件系统。在PB375这款U盘读写芯片基础上增加支持读写SD/MMC卡的功能。其支持SPI及UART两种通信模式,可以让您的单片机开发更加方便。

PB375A有着以下几个特点:

1.单芯片方案

支持符合USB 相关规范基于Bulk-Only 传输协议的各种U 盘/闪存盘/外置硬盘。

完美的将USB HOST及FAT文件系统集成在单芯片中,无需了解USB Host和FAT文件系统,U盘读写操作对于您的现有系统来说只是几个简单的命令。

2.操作方便、指令简单

文件操作功能:新建、删除、读写数据,打开关闭文件等

只需要几个简单的指令即可完成U盘或者SD/MMC卡的读写操作。

3.支持SD/MMC卡读写

只需要简单的设置,即可操作SD/MMC卡,其操作命令与操作U盘一致。

4.多种通信方式

3.3V电平,SPI接口及Uart串口模式,让您的单片机系统有更多的选择。

5.低成本、性价比高

由于是单芯片解决方案,无需一个大容量MCU+USB HOST芯片来构建U盘读写功能,其成本只是上述方案的60%以下。外围元件极少,相对于51MCU+SL811/CH375的模块,无论模块尺寸还是成本都有着极大的优势,让您的系统更有竞争力。

6.对单片机要求低

PB375A集成了文件系统,基本不占用程序空间和RAM空间,单片机只需要几十个字节的RAM空间就可以很方便的操作PB375A.

7.对U盘兼容性高

U 盘、闪盘、闪存盘、USB 移动硬盘、USB 读卡器等

兼容目前市面上的流通的大部分U盘、SD卡、读卡器+卡。

芯片描述

采用了方便、高速、简单的SPI接口和UART接口

· 全速USB 设备接口,兼容USB V2.0,外围元器件只需要晶体和少量的元器件。

· 集成USB1.1 Full Speed Host 收发器

· 支持5V 电源电压。

· 低成本,采用SPI Slave、UART接口。

· 芯片固化FAT12/FAT16/FAT32文件系统。

· LQFP-64-10x10-0.5无铅封装,兼容RoHS。

以下为用ATMEGA16的串口操作PB375A模块进行创建一个1.TXT的文件,并写入数据保存的C程序例子。

#i nclude
#i nclude "D:\ICC_H\CmmICC.H"

#define DISP_PORT PORTB
#define DISP_DDR DDRB

char a1[]={0X3A,0X71,0X00};    //检测U盘
char a2[]={0X3A,0X65,0X06,0X5C,0X31,0X2E,0X54,0X58,0X54}; //新建文件
char a3[]={0X3A,0X7C,0X09,0X5C,0X42,0X6C,0X75,0X65,0X66,0X69,0X76,0X65};//写入数据
char a4[]={0X3A,0X67,0X00};    //关闭文件

//延时子程序
void delayms(unsigned int i)
{
unsigned int j,k;
for (j =0; j < i; j++)
{
    for(k = 0; k < 100; k++)
    ;
}

}

//延时子程序
void delays(unsigned int i)
{
unsigned int j,k,d;
for(j=0;j {
    for(k=0;k<1000;k++)
   {
      for(d=0;d<100;d++)
    ;
    }   
}

}


//初始化串口
void uart0_init(void)
{
   
    UCSRB = 0x00;   //disable while setting baud rate
    UCSRA = 0x00;
    UCSRC = 0x86;
    UBRRL = 47;     //set baud rate lo,波特率为9.6K
    UBRRH = 0x00;   //set baud rate hi
    UCSRB = 0x98;   //接收中断允许,接收缓冲自动清空,接收允许
   
   
   
}


//接收中断程序
#pragma interrupt_handler uart0_rx_isr:12 //中断程序
    void uart0_rx_isr(void)
    {
       DISP_PORT = UDR;
    }



//初始化单片机   
void mcu_init(void)
{
    CLI();           //全局中断标志禁止
    uart0_init();
    MCUCR = 0x00;
    GICR = 0x00;
    TIMSK = 0x00;   //timer interrupt sources
    SEI();          //re-enable interrupts 全局中断标志使能
}


//检测U盘存在命令
//a1数组中的数据为0X3A,0X71,0X00
// 0x3A--串口通信起始符
// 0x71--检测U盘是否存在
// 0x00--数据包长度为0
void CMD_DiskReady()
{
char i=0;
for(i=0;i<3;i++)
{
    UDR=a1;
    delayms(10);
}
    delays(1);
}


//新建文件       1.TXT
//a2数组中的数据为0X3A,0X65,0X06,0X5C,0X31,0X2E,0X54,0X58,0X54
// 0x3A--串口通信起始符
// 0x65--新建文件命令码
// 0x06--数据包长度为6 即/1.TXT 字符串的长度
// 0X5C,0X31,0X2E,0X54,0X58,0X54 为/1.TXT 的ascii码的十六进制数据
void CMD_FileCreate()
{
char j=0;
for(j=0;j<9;j++)
{
     UDR=a2[j];
     delayms(10);
}
     delays(1);
}


//写入数据 Bluefive
//a3数组中的数据为0X3A,0X7C,0X09,0X5C,0X42,0X6C,0X75,0X65,0X66,0X69,0X76,0X65
// 0x3A--串口通信起始符
// 0x7C--新建文件命令码
// 0x09--数据包长度为6 即要写入数据的长度
// 0X5C,0X42,0X6C,0X75,0X65,0X66,0X69,0X76,0X65 要写入数据 的ascii码的十六进制数据
void CMD_ByteWrite()
{
char d=0;
for(d=0;d<12;d++)
{
     UDR=a3[d];
    delayms(10);
}
     delays(1);
}


//关闭文件       1.TXT
//关闭文件命令
//a3数组中的数据为0X3A,0X67,0X00
// 0x3A--串口通信起始符
// 0x67--关闭文件命令码
// 0x00-数据包长度为0
void CMD_FileClose()
{
   char k=0;
   for(k=0;k<9;k++)
{
     UDR=a4[k];
    delayms(10);
}
     delays(1);
}


//主程序
void main()
{
    DDRB=0xff;
    PORTB=0x0f;
    mcu_init();
   
    CMD_DiskReady(); //测试U盘是否存在
    delays(40);
    //需要根据串口返回数据判断U盘是否存在

    CMD_FileCreate();
    delays(40);
    //需要根据串口返回数据判断文件是否创建成功
    CMD_ByteWrite();
    delays(40);
    //需要根据串口返回数据判断数据是否写入成功
    CMD_FileClose();
    //需要根据串口返回数据判断文件是否关闭   
   
    while(!(UCSRA&0x40));    //等待发送结束
    UCSRA|=0x40;            //清除发送结束标志位
    delays(40);
    while(1)   
    {
    //主程序
    delayms(50);   
    }
}

最新回复

mark  详情 回复 发表于 2009-11-2 13:14
点赞 关注

回复
举报

61

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
mark
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表