Cortex-M3之USB模块与SST25系列Flash存储

Cortex-M3之USB模块与SST25系列Flash存储

1、  Cortex-M3内核LPC17xx系列的微处理器自带了USB接口的Device/Host/OTG,很方便,一般做USB的时候只要简单的设置时钟和相关寄存器即可,在这里需要让自己记住的一点是,LPC1751所带的USB接口只能用于Device,没有Host功能,在程序编程的时候我们只要使能设备时钟和AHB时钟,无需理会断点选择时钟,其USB初始化步骤如下:

(1)       初始化PLL1,输出48MHz的时钟,供USB设备使用;

(2)       配置USB模块引脚功能;

(3)       时能USB外设,开电源,开中断;

(4)       时能时钟,程序如下,这里不应对断点选择时钟进行判断,特别注意,如下:

  USB->USBClkCtrl = 0x12;   

  while ((USB->USBClkSt & 0x12) != 0x12);

(5)       USB设备功能模块初始化:

  USB->USBEpInd = 0;

  USB->USBMaxPSize = USB_MAX_PACKET0;

  USB->USBEpInd = 1;

  USB->USBMaxPSize = USB_MAX_PACKET0;

  while ((USB->USBDevIntSt & EP_RLZED_INT) == 0);

 

  USB->USBEpIntClr = 0xFFFFFFFF;

  USB->USBEpIntEn   = 0xFFFFFFFF ^ USB_DMA_EP;

  USB->USBDevIntClr = 0xFFFFFFFF;

  USB->USBDevIntEn  = DEV_STAT_INT    | EP_SLOW_INT    |

               (USB_SOF_EVENT   ? FRAME_INT : 0) |

               (USB_ERROR_EVENT ? ERR_INT   : 0);

(6)       设置地址,设置连接状态:

  USB_SetAddress(0);

USB_Connect(__TRUE);

2、  USB内核程序移植,有以下几个文件,移植过程相对简单,略;


3、  我们通过USB接口的主要目的是将数据存储到Flash中,并能方便将处理器生成的数据上传到PC中,在这个过程中主要涉及到两个方面的内容,一个是文件系统,一个是Flash的读写。

(1)       文件系统。现在用的最广的文件系统便是FAT了,他分FAT12、FAT16、FAT32,其道理是一样的,不同点在于文件根目录的字节大小。在这里我们在Flash中模拟一个文件系统,即将文件系统的引导代码直接写入Flash中。一般存储系统的引导代码都是一样的,如U盘,硬盘,下面的代码即是从U盘中拷贝过来的,该512字节在USB存储设备中很关键。若读取这512个字节出错,电脑会提示要格式化存储设备。

0xEB,0x3C,0x90,0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30,0x00,0x02,0x01,0x01,0x00,

0x01,0x10,0x00,0x20,0x00,0xF8,0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x74,0x19,0x02,0x27,0x4C,0x50,0x43,0x32,0x34,

0x37,0x38,0x20,0x55,0x53,0x42,0x46,0x41,0x54,0x31,0x32,0x20,0x20,0x20,0x33,0xC9,

0x8E,0xD1,0xBC,0xF0,0x7B,0x8E,0xD9,0xB8,0x00,0x20,0x8E,0xC0,0xFC,0xBD,0x00,0x7C,

0x38,0x4E,0x24,0x7D,0x24,0x8B,0xC1,0x99,0xE8,0x3C,0x01,0x72,0x1C,0x83,0xEB,0x3A,

0x66,0xA1,0x1C,0x7C,0x26,0x66,0x3B,0x07,0x26,0x8A,0x57,0xFC,0x75,0x06,0x80,0xCA,

0x02,0x88,0x56,0x02,0x80,0xC3,0x10,0x73,0xEB,0x33,0xC9,0x8A,0x46,0x10,0x98,0xF7,

0x66,0x16,0x03,0x46,0x1C,0x13,0x56,0x1E,0x03,0x46,0x0E,0x13,0xD1,0x8B,0x76,0x11,

0x60,0x89,0x46,0xFC,0x89,0x56,0xFE,0xB8,0x20,0x00,0xF7,0xE6,0x8B,0x5E,0x0B,0x03,

0xC3,0x48,0xF7,0xF3,0x01,0x46,0xFC,0x11,0x4E,0xFE,0x61,0xBF,0x00,0x00,0xE8,0xE6,

0x00,0x72,0x39,0x26,0x38,0x2D,0x74,0x17,0x60,0xB1,0x0B,0xBE,0xA1,0x7D,0xF3,0xA6,

0x61,0x74,0x32,0x4E,0x74,0x09,0x83,0xC7,0x20,0x3B,0xFB,0x72,0xE6,0xEB,0xDC,0xA0,

0xFB,0x7D,0xB4,0x7D,0x8B,0xF0,0xAC,0x98,0x40,0x74,0x0C,0x48,0x74,0x13,0xB4,0x0E,

0xBB,0x07,0x00,0xCD,0x10,0xEB,0xEF,0xA0,0xFD,0x7D,0xEB,0xE6,0xA0,0xFC,0x7D,0xEB,

0xE1,0xCD,0x16,0xCD,0x19,0x26,0x8B,0x55,0x1A,0x52,0xB0,0x01,0xBB,0x00,0x00,0xE8,

0x3B,0x00,0x72,0xE8,0x5B,0x8A,0x56,0x24,0xBE,0x0B,0x7C,0x8B,0xFC,0xC7,0x46,0xF0,

0x3D,0x7D,0xC7,0x46,0xF4,0x29,0x7D,0x8C,0xD9,0x89,0x4E,0xF2,0x89,0x4E,0xF6,0xC6,

0x06,0x96,0x7D,0xCB,0xEA,0x03,0x00,0x00,0x20,0x0F,0xB6,0xC8,0x66,0x8B,0x46,0xF8,

0x66,0x03,0x46,0x1C,0x66,0x8B,0xD0,0x66,0xC1,0xEA,0x10,0xEB,0x5E,0x0F,0xB6,0xC8,

0x4A,0x4A,0x8A,0x46,0x0D,0x32,0xE4,0xF7,0xE2,0x03,0x46,0xFC,0x13,0x56,0xFE,0xEB,

0x4A,0x52,0x50,0x06,0x53,0x6A,0x01,0x6A,0x10,0x91,0x8B,0x46,0x18,0x96,0x92,0x33,

0xD2,0xF7,0xF6,0x91,0xF7,0xF6,0x42,0x87,0xCA,0xF7,0x76,0x1A,0x8A,0xF2,0x8A,0xE8,

0xC0,0xCC,0x02,0x0A,0xCC,0xB8,0x01,0x02,0x80,0x7E,0x02,0x0E,0x75,0x04,0xB4,0x42,

0x8B,0xF4,0x8A,0x56,0x24,0xCD,0x13,0x61,0x61,0x72,0x0B,0x40,0x75,0x01,0x42,0x03,

0x5E,0x0B,0x49,0x75,0x06,0xF8,0xC3,0x41,0xBB,0x00,0x00,0x60,0x66,0x6A,0x00,0xEB,

0xB0,0x4E,0x54,0x4C,0x44,0x52,0x20,0x20,0x20,0x20,0x20,0x20,0x0D,0x0A,0x52,0x65,

0x6D,0x6F,0x76,0x65,0x20,0x64,0x69,0x73,0x6B,0x73,0x20,0x6F,0x72,0x20,0x6F,0x74,

0x68,0x65,0x72,0x20,0x6D,0x65,0x64,0x69,0x61,0x2E,0xFF,0x0D,0x0A,0x44,0x69,0x73,

0x6B,0x20,0x65,0x72,0x72,0x6F,0x72,0xFF,0x0D,0x0A,0x50,0x72,0x65,0x73,0x73,0x20,

0x61,0x6E,0x79,0x20,0x6B,0x65,0x79,0x20,0x74,0x6F,0x20,0x72,0x65,0x73,0x74,0x61,

0x72,0x74,0x0D,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0xCB,0xD8,0x55,0xAA,

 

其含义如下图:


 

(2)       Flash的读写操作。USB内核程序移植完成之后,我们还需改动三个函数,以完成USB数据存储到Flash当中,如下图中划线函数,这三个函数是对存储Flash的读写过程。



4、  SST25系列Flash存储芯片的操作方法,使用SPI接口,使用命令操作,


注意划线函数,其地址的A7~A0必须为0,SST25系列Flash每页246Byte,且只能以页为单位进行写操作。

 

 

总结:USB存储数据主要涉及到一个文件系统,SST系列Fash是一个裸片,不似SD卡,SD卡内部自带了一个文件系统,这似乎是编程当中的一个难点。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值