【ART-Pi测评】七:usb接口访问板载存储,模拟U盘
[复制链接]
本帖最后由 数码小叶 于 2021-8-22 22:13 编辑
ART-Pi的板载存储还是很丰富的,比如SPI FLAS、SDRAM、内部flash、SD卡,基本该有的都有。前面几篇已经涉及的差不多了,对于这些存储的访问有多种方式,可以MCU直接读取,可以MCU读取串口发送到电脑,也可以USB直接访问读写。
首先,依旧是先建一个空白工程
对于空白工程,可以看一下,只打开了UART和pin设备
在建好的空白工程里打开文件系统设置
打开文件系统后,就会出现SD卡和spi flash,那就同时挂载这两个吧
编译烧录,再来对比一下设备变化
已经挂载成功,但是SD卡没有成功挂载,又犯了上次一样的错误,没有插入SD卡,插入一个2G的卡后,再次启动
SD卡和spi flash都ok了
到这存储外设访问已经全部就绪,就差一个USB接口配置了
打开usb设备,编译下载,到目前,这个工程的内存占用已经不小了,一般只靠内部flash的芯片已经扛不住了
不是一路顺利,报错、并且设备卡死了
定位到程序出错的地方
struct mstorage *data;
RT_ASSERT(func != RT_NULL);
RT_DEBUG_LOG(RT_DEBUG_USB, ("Mass storage function enabled\n"));
data = (struct mstorage*)func->user_data;
data->disk = rt_device_find(RT_USB_MSTORAGE_DISK_NAME);
if(data->disk == RT_NULL)
{
rt_kprintf("no data->disk named %s\n", RT_USB_MSTORAGE_DISK_NAME);
return -RT_ERROR;
}
找不到设备,继续往下寻找看下设备名字
#define RT_USB_MSTORAGE_DISK_NAME "flash0"
这就很明显了,我们没有flash0的设备,自然挂载不成功了,改成我们的设备名,SD卡或者spi flash的,那就SD卡的吧
再次编译烧录
高兴的是已经可以被电脑识别到了,但是依旧会报错,打开失败,在这个错误上耗费了很多时间排查
if(rt_device_open(data->disk, RT_DEVICE_OFLAG_RDWR) != RT_EOK)
{
rt_kprintf("disk open error\n");
return -RT_ERROR;
}
最后了解到是因为同时挂载到pc和rtthread的文件系统,导致冲突了,那就很好解决了
rt_thread_delay(5000);
dfs_unmount_device(data->disk);
运行5s后,手动卸载设备
终于,U盘映射成功了,
试试文件的访问以及编辑,都是ok的
再测试一下文件传输,发现对于文件的传输,应该还要优化下程序,小文件都没问题,可以很顺利的拷贝,但是对于几个G的电影,就会传输卡死
最后,就是ART-Pi最好要加上散热片,运行时,真的是烫手
|