本帖最后由 misonyo 于 2018-8-4 10:23 编辑
[md]
## 1. 准备 ##
本章节将介绍使用RT-Thread提供的文件系统组件保存获取的GPS传感器数据到文件。
GD32303E-EVAL 开发板板载的 SPI FLASH型号是GD25Q40,原理图如下图所示:

本文使用的GPS模块型号是GY-GPS6MV2,采用 U-BLOX NEO-6M 模组,兼容 3.3V/5V 电平。
GPS模块外观如下:

GPS模块和GD32303E-EVAL开发板连接情况如下:
| GPS引脚 | GD32303E-EVAL开发板引脚 |
| ----- | --------|
| VCC | 3.3V或者5.0V电源 |
| GND | GND |
| RXD | USART1 TX,引脚为PA2 |
| TXD | USART1 RX,引脚为PA3 |
开发板供电及连接情况:
* 供电方式:开发板使用 Mini USB 接口或者 DC-005 连接器提供 5V 电源。
* 下载程序:下载程序到开发板需要一套 JLink 或者使用 GD-Link 工具。
* 串口连接:使用 USB 转串口线连接开发板的串口0对应的 PA9 (TX) 和 PA10 (TX) 引脚,并连接电脑。
## 2. 运行测试代码 ##
本章节需要使用到新增的 spi flash 驱动,因此请大家点击附件下载最新的BSP源代码。
使用ENV工具配置文件系统:
1. 在ENV工具命令行界面输入`menuconfig`命令开启配置界面:

2. 添加USART1驱动:

3. 使能设备驱动如下功能,SPI FLASH 设备 GD25Q40 就会挂载到SPI 总线 SPI0上。

4. 工程已经默认使能FatFs文件系统,需要修改扇区大小:

5. 保存配置,退出配置界面,在ENV工具命令行界面使用`scons --target=mdk5`生成新工程。打开新生成的MDK工程,并添加示例代码到工程:

** 运行结果 **
在电脑端使用 putty 打开对应端口,波特率配置为115200,编译代码并下载至开发板,然后按 reset 重启开发板,putty 会显示如下的操作系统的启动信息,表明SPI FLASH驱动添加成功:
```
\ | /
- RT - Thread Operating System
/ | \ 3.0.3 build May 3 2018
2006 - 2018 Copyright by rt-thread team
[SFUD]Find a GigaDevice GD25Q16B flash chip. Size is 2097152 bytes.
[SFUD]gd25q flash device is initialize success.
msh />
```
输入`list_device`命令可以查看操作系统的所有设备,可以看到 SPI FLASH 设备 gd25q40等:
```
msh />list_device
device type ref count
------- -------------------- ----------
gd25q Block Device 0
spi01 SPI Device 0
i2c0 I2C Bus 0
pin Miscellaneous Device 0
spi1 SPI Bus 0
spi0 SPI Bus 0
uart1 Character Device 0
uart0 Character Device 3
msh />
```
接下来我们使用`mkfs` 命令格式化SPI FLASH 设备 gd25q40,执行该命令会将 gd25q40 格式化成FatFS文件系统,第一次使用才需要格式化:
```
msh />mkfs gd25q
```
然后执行spi flash 驱动提供的`mnt_init`命令挂载SPI FLASH 设备 gd25q40到根目录,使用`ls`命令可以看到新增了Directory目录,每次重启开发板后都需要执行`mnt_init`命令重新挂载设备。
```
msh />mnt_init
spi flash mount success !
msh />ls
Directory /:
msh />
```
到这一步文件系统的准备工作就完成了,我们可以使用文件系统相关接口操作SPI FLASH 设备 gd25q40。执行`app_init`命令执行示例代码,此示例代码基于系列二,会将示例代码的执行函数添加为 msh 命令,在 msh 执行此命令会创建一个 fs 的线程,线程会以中断接受的方式保存接受到的GPS传感器发送的数据到 gps_data.txt 文件里。再次执行`ls`命令可以看到根目录下新增的gps_data.txt文件。
```
msh />app_init
msh />ls
Directory /:
GPS_DATA.TXT 133
msh />
```
## 3. 文件系统的使用 ##
本文示例代码调用文件系统相关接口源码如下:
```
void fs_thread_entry(void *parameter)
{
rt_uint8_t line[256];
int fd;
while(1)
{
data_read(line, sizeof(line));
/* 以读写方式、数据以附加的方式添加到文件的尾部方式打开文件 */
fd = open("/gps_data.txt", O_RDWR | O_CREAT | O_APPEND, 0);
if (fd >= 0)
{
/* 往文件写入接受到的数据 */
write(fd, line, strlen((char*)line));
/* 关闭文件 */
close(fd);
}
else
{
rt_kprintf("open gps_data.txt failed!\n");
}
}
}
```
## 4. 参考 ##
* [ENV工具]()
* [GD32303E-EVAL](http://gd32mcu.21ic.com/site)
* [文件系统](https://www.rt-thread.org/document/site/rtthread-development-guide/rtthread-manual-doc/zh/1chapters/12-chapter_filesystem/)
* [玩溜GD32303E-EVAL BSP系列(一)------基本系统跑起来~](https://www.rt-thread.org/qa/thread-7027-1-1.html)
* [玩溜GD32303E-EVAL BSP系列(二)----读取GPS传感器数据](https://www.rt-thread.org/qa/thread-7033-1-1.html)
* [玩溜GD32303E-EVAL BSP系列(三)----读取温度湿度传感器数据](https://www.rt-thread.org/qa/thread-7038-1-1.html)
* [GD32303E-EVAL BSP源码及资料百度云盘链接](https://pan.baidu.com/s/1uHza1tiVUnmg8ixMzZLAFA)
[/md]
查看更多