本文主要是通过迁移的思维,记录本人初次使用周立功的Aworks框架进行BSP开发
前置知识,一般来说访问U盘,软件上需要满足如下几点功能。
- USB host 驱动
- USB host stack 协议栈
- File system 文件系统。
1. 首先阅读原理图
2. 设备资源及驱动适配
2.1 设备资源的注册
硬件上有两个USB口,在硬件设计上只使用USB1,其资源文件在awbl_hwconf_imx1050_usbh1.h当。
2.2 设备驱动的注册
在aw_prj_config.c文件当中
#ifdef AW_DRV_IMX1050_USBH
awbl_imx10xx_usbh_drv_register();
#endif
#ifdef AW_COM_USBH
extern void awbl_usbh_bus_init (void);
awbl_usbh_bus_init();
awbl_usbh_hub_drv_register();
#endif
#ifdef AW_DRV_USBH_MASS_STORAGE
extern void awbl_usbh_mass_storage_drv_register (int buffer_size);
awbl_usbh_mass_storage_drv_register(AW_CFG_USB_MS_BUF_SIZE);
#endif
2.3 设备宏开关
只需要在aw_prj_params.h打开如下定义
aw_prj_params.h
#define AW_COM_IO_SYSTEM /**< rief 使能 I/O 子系统 */
#define AW_COM_FS_ROOTFS /**< rief 使能根文件系统 */
#define AW_COM_FS_FATFS /**< rief 使能 FAT 文件系统 */
#define AW_COM_MOUNT /**< rief 存储卷挂载点管理 */
#define AW_COM_USBH /**< rief USB协议栈裁(Host)组件 */
即可注册相关的设备资源与设备驱动。
/**
ame USB协议栈裁剪配置
* @{
*/
#ifdef AW_COM_USBH
#define AW_DRV_USBH_MASS_STORAGE /**< rief 大容量存储驱动(U盘&硬盘) */
#define AW_DRV_USBH_UVC /**< rief USB通用摄像头类*/
//#define AW_DRV_USBH_HID /**< rief USB人体接口设备类*/
//#define AW_DRV_USBH_CDC_ECM /**< rief USB通讯设备类:网络控制模型驱动 */
#define AW_DRV_USBH_CDC_SERIAL /**< rief USB通信设备类:USB转串口驱动*/
#endif
#if defined(AW_COM_USBH) || defined(AW_COM_USBD)
#define AW_CFG_USB_MEM_SIZE (128 * 1024) /**< rief USB协议栈内存使用空间大小 */
#endif
#ifdef AW_DRV_USBH_MASS_STORAGE
#ifndef AW_COM_BLOCK_DEV
#define AW_COM_BLOCK_DEV
#endif
#define AW_CFG_USB_MS_BUF_SIZE (16 * 1024) /**< rief U盘数据交互缓存,占用AW_CFG_USB_MEM_SIZE空间,影响U盘读写性能,推荐16k */
#endif
一旦使能相关宏开关,对应的驱动就会被选上。
3. 如何测试
使用SDK自带的测试样例demo_udisk_fs.c即可进行测试.
4. 总结
在使用样例进行测试时,需指定USB的设备名称及是否格式化U盘。
#define __BLK_NAME DE_USB_BLK_NAME /* USB设备名 */
#define __FORMAT_ENABLE 1 /* 格式化使能,格式化一次即可 */