# tuh_msc_mem

## 用例说明

本例演示从 U 盘中读取文件并加载到内存的指定位置，或将内存中指定位置和大小的数据保存到 U 盘中。

本例实际上也是一个可更新程序的 bootloader，通过 “mem exec” 指令即可跳转执行指定位置的程序。用户将生成的二进制文件放入 U 盘，并插入到开发板上，通过终端将 U 盘中的二进制文件写入到指定位置，即可实现更新固件的功能。

## 操作过程

+ 准备一份文件，存入到 U 盘中，并将 U 盘插入到开发板上。
+ 在PC机上启动UART串口调试终端（例如Tera Term），连接到开发板。
+ 编译本样例工程，下载可执行程序到开发板。
+ 输入 “help” 查看帮助选项。
+ 使用 “mem erase” 擦除指定位置的内存数据。
+ 使用 “mem write” 将指定文件写入到内存的指定位置。
+ 使用 “mem read” 将内存指定位置和大小的数据写入到 U 盘中。

## 运行log

~~~bash
tuh_msc_mem example.
A MassStorage device is mounted
Generic  MassStorageClass rev 1539
Disk Size: 3781 MB
> help
 * help
        Print list of commands
 * cd
        Usage: cd [DIR]...
        Change the current directory to DIR.
 * ls
        Usage: ls [DIR]...
        List information about the FILEs (the current directory by default).
 * pwd
        Usage: pwd
        Print the name of the current working directory.
 * mem
        Usage: mem exec [BASE]
        Execute program from [BASE].
        Usage: mem list
        List memory base & size.
        Usage: mem erase [BASE] [SIZE]
        Erase memory.
        Usage: mem write [BASE] [DIR]
        Write data from u disk to memory.
        Usage: mem read  [BASE] [DIR] [SIZE]
        Read data from memory & Write to u disk.

> mem list
MEM BASE        MEM SIZE
0x30010000      65536
0x90000000      1048576
> ls
bin.bin                                 20 KB
/System Volume Information
sram.bin                                10 KB
mem.bin                                 10 KB
/music
project.bin                             9 KB
> mem erase 0x90000000 20480
Erase base = 0x90000000, size = 20480
> mem write 0x90000000 project.bin
Done.
> mem read 0x90000000 read_from_mem.bin 20480
Done.
> ls
bin.bin                                 20 KB
/System Volume Information
sram.bin                                10 KB
mem.bin                                 10 KB
/music
read_from_mem.bin                       20 KB
project.bin                             9 KB
>
~~~

