衡山派Luban-Lite系统挂载FAT32格式U盘实战指南:基于D211BBV开发板的USB Host与CherryUSB配置
衡山派Luban-Lite系统挂载FAT32格式U盘实战指南基于D211BBV开发板的USB Host与CherryUSB配置最近在衡山派D211BBV开发板上做项目需要把一些采集到的数据存到外部U盘里。一开始以为插上就能用结果发现从硬件跳线到软件配置每一步都得调对才行。今天我就把整个配置过程包括踩过的几个坑从头到尾梳理一遍手把手教你如何在Luban-Lite系统上挂载FAT32格式的U盘。咱们的目标很明确让开发板能识别U盘并自动挂载到文件系统里方便我们读写文件。整个过程会涉及硬件跳线、内核USB模式配置、CherryUSB协议栈的使能以及最后的挂载验证。放心我会把每一步的原理和操作都讲清楚。1. 准备工作与硬件检查在动手改代码之前咱们先得把硬件这关过了。嵌入式开发就是这样软硬件不分家。1.1 确认你的开发板型号这篇教程主要针对衡山派D211BBV系列开发板我手头用的是D211BBV-DEMO-V2.0这个版本。不同版本的板子硬件细节可能略有不同但大体的配置思路是相通的。1.2 关键的硬件跳线USB-SW这是第一个容易忽略的点。D211BBV开发板上有一个关键的跳线帽标记为USB-SW。这个跳线的作用是切换USB接口的工作模式。你可以把它理解为一个“模式开关”短接插上跳线帽此时USB接口工作在Host主机模式。开发板作为“主机”可以去连接和识别U盘、鼠标、键盘等USB设备。断开拔掉跳线帽此时USB接口通常工作在Device设备模式或用于程序烧录。开发板自身作为一个USB设备可以被电脑识别。注意这个跳线帽在烧录程序和运行程序时需要不同的状态后面会详细说这里先有个印象。2. 软件配置让系统支持USB主机功能硬件准备妥当后我们进入核心的软件配置环节。Luban-Lite系统使用menuconfig图形化界面来配置内核和组件非常方便。2.1 第一步进入配置菜单首先打开终端进入到你的Luban-Lite SDK根目录执行以下命令打开配置界面make menuconfig你会看到一个基于文本的图形菜单通过键盘方向键和回车键进行操作。2.2 第二步配置USB接口为Host模式我们需要告诉系统我们要使用哪个USB接口并且把它设置成主机模式。在menuconfig主菜单通过方向键找到并进入Board options子菜单。在这个子菜单里找到Using Usb0选项按空格键选中它前面会出现[*]。这表示我们要启用USB0这个物理接口。紧接着下面会有一个Select Usb0 mode (Host)的选项。按回车键进入这里通常只有一个Host选项选中它即可。完成后的配置状态应该是这样的Board options --- [*] Using Usb0 Select Usb0 mode (Host) --- Host这一步的作用是初始化硬件层的USB控制器并将其模式锁定为“主机”为后续识别U盘打下基础。2.3 第三步集成CherryUSB协议栈的MSC驱动光有硬件主机模式还不够我们还需要一个“翻译官”来处理复杂的USB通信协议。CherryUSB就是一个轻量级的USB协议栈我们主要用到它的主机Host功能和海量存储设备MSC驱动。从Board options退回到menuconfig主菜单。依次进入Local packages options-Third-party packages options。找到CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP按空格键选中它。选中后按回车键进入其详细配置子菜单。这里我们要做几个关键选择Enable usb device mode不要选除非你同时需要设备模式。Enable usb host mode必须选中前面出现[*]。进入Enable usb host mode的子菜单确保Enable usb msc driver被选中。MSC驱动就是专门用来读写U盘、移动硬盘的。为了测试方便建议也选中Enable usb example里面可能包含一些有用的测试代码。最终的配置结果如下所示Third-party packages options --- [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP [ ] Enable usb device mode [*] Enable usb host mode --- [*] Enable usb msc driver [*] Enable usb example3. 设置文件系统自动挂载系统识别U盘后我们需要把它“映射”到文件系统的一个目录下比如/udisk这样我们才能用ls,cd,cat这些命令来访问里面的文件。Luban-Lite系统通常使用elm即Elm-Chan FatFs组件来处理FAT32文件系统。我们需要在板级配置文件中将U盘设备添加到自动挂载表里。找到你当前项目的板级配置文件路径通常是target/cpu/board/board.c。请将cpu和board替换为你实际使用的芯片型号和板子名称。在这个board.c文件中寻找一个名为mount_table的数组。这个数组定义了系统启动后自动挂载的文件系统。在数组中添加一行新的挂载项。注意数组末尾可能有一个{0}作为结束标志添加时要放在它前面。找到类似下面的代码块const struct dfs_mount_tbl mount_table[] { ... // 这里可能已有其他挂载项比如 “/dev” 挂载到 “/” {udisk, /udisk, elm, 0, 0, 0}, // 这是我们新增的一行 ... // 可能还有其他项 {0} // 结束标志 };这行代码的意思是将名为udisk的块设备系统识别U盘后会给它分配这个名字使用elm文件系统驱动挂载到根目录下的/udisk文件夹。后面的三个0是挂载参数这里用默认值就行。4. 编译、烧录与硬件切换配置全部完成后就可以编译固件了。在menuconfig界面按右方向键选择 Save 保存配置然后选择 Exit 退出。在SDK根目录执行make命令进行编译。如果没有错误会生成最终的固件文件如aic_bl.elf或.bin文件。接下来是至关重要的硬件操作步骤顺序错了可能导致烧录失败注意烧录前的关键动作在连接烧录器、准备给开发板烧录程序之前务必确保 USB-SW 的跳线帽是拔掉的断开状态。这是因为很多开发板的USB烧录功能与Host模式共用硬件线路短接时无法进入烧录模式。我当初就在这里卡了好久总是提示连接失败。确认USB-SW跳线帽已拔掉然后通过烧录工具如串口或J-Link将编译好的固件烧写到开发板中。烧录完成后先断开开发板电源。5. 功能验证插上U盘试试看激动人心的时刻到了我们来验证U盘是否真的能被识别和访问。5.1 识别U盘设备将你的FAT32格式的U盘插入开发板的USB接口。短接USB-SW跳线帽把它插回去。这是告诉硬件“现在开始我要当USB主机了”。给开发板上电。通过串口终端连接到开发板。系统启动后在命令行输入以下命令列出所有设备list_device在输出信息中仔细寻找名为udisk的设备其类型应为Block Device。如果能看到类似下面的输出恭喜你系统已经成功识别了U盘aic / list_device device type ref count -------- -------------------- ---------- ... udisk Block Device 1 ...提示如果你没有在board.c里设置自动挂载或者想手动挂载到其他目录可以在此刻使用命令mount udisk /udisk elm。但既然我们配置了自动挂载系统应该已经帮我们做好了。5.2 访问U盘中的文件U盘设备识别并挂载后它就像一个普通的文件夹一样。让我们进去看看。使用cd命令进入挂载点目录cd udisk使用ls命令列出U盘里的文件和文件夹ls你会看到类似这样的输出显示U盘内的实际内容aic /udisk ls Directory /udisk: System Volume InformDIR # 系统卷信息目录Windows生成 D21x DIR # 你自己创建的文件夹 ARTINCHIP.PPT 4814660 # 一个示例文件现在你就可以像操作本地文件一样使用cp,mv,cat等命令来读写U盘里的数据了。比如把当前目录下的一个log.txt文件拷贝到U盘cp log.txt /udisk/。整个过程走下来从硬件跳线到软件配置每一步都环环相扣。最常出问题的地方就是USB-SW跳线帽的状态烧录和运行一定要分清。另一个就是menuconfig里的配置项要选对特别是CherryUSB的Host模式和MSC驱动。按照这个流程走一遍你的衡山派开发板就能变身为一个能读取U盘数据的小电脑了。