你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

[分享]WB-EIOT开发板移植rtthread系统的文件系统

[复制链接]
wbeast 发布时间:2019-7-31 15:20
   DFS 是 RT-Thread 提供的虚拟文件系统组件,全称为 Device FileSystem,即设备虚拟文件系统。文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type),是一种用于向用户提供底层数据访问的机制。文件系统通常存储的基本单位是文件,即数据是按照一个个文件的方式进行组织。当文件比较多时,将导致文件繁多,不易分类、重名的问题。而文件夹作为一个容纳多个文件的容器而存在。
rtthreadDFS组件特点:
为应用程序提供统一的 POSIX 文件和目录操作接口:read、write、poll/select等。
支持多种类型的文件系统,如 FatFS、RomFS、DevFS 等,并提供普通文件、设备文件、网络文件描述符的管理。
支持多种类型的存储设备,如 SD Card、SPI Flash、Nand Flash 等。
   本章实验用W25Q16作为存储设备
DFS文件系统结构框架:
TIM截图20190731145320.png
! y0 I! G6 k+ ~3 S7 Z% G5 r
0 ^9 y# e- r9 J/ c& I使用辅助开发工具移植DFS组件7 `0 V5 u1 `' a! @; ]7 N" |
1、 使能文件系统' V) s1 |1 n" L% r/ ^
2.png / j) }2 L' ~6 S3 @$ b# v: S8 L
2、设置elm-chan's FatFs, Generic FATFilesystem Module 选项中修改关于长文件名支持的选项,否则在后面使用文件系统的过程中,创建的文件或者文件夹的名称不能超过 8 个字符。修改方式如下图所示:
3.png
3、设置长文件名支持
4.png
4、因为要使用一些 C 库函数,所以需要打开 libc 功能:
5.png
5、在 RT-Thread Components → Device Drivers 界面中选中 Using SPI Bus/Device device drivers 以及 Using Serial Flash Universal Driver 选项,如下图所示:
6.png
6、(38)SPI NOR flash ce pin index ,是SPI的CS管脚,第38个管脚
7.png
7、在RT-ThreadKernel路径,将内核时间片设置到1000
8.png
8、保存配置,scons --target=mdk5,生成工程。编译无错误后,下载程序。可以看到系统启动成功,但是flash没有读取成功,原因软件配置生成的代码SPI2的管脚与开发板的SPI2复用的管脚不同。如下图所示:
9.png
9、修改如下:
10.png
10、重新编译,下载。Flash读取成功
11.png
11、通过 list_device指令,查看当前系统中的设备
12.png
12、可以使用 sf prode norspi命令对该设备做 benchmark 测试。如下图
13.png
13、通过mkfs –t mle flash0指令,挂载文件系统
14.png
14、可以通过ls 指令,可以查询当前文件系统下面的文件;通过cd 可以跳转目录;通过cp可以拷贝数据;通过cat可以某个文件内容;rm删除特定文件;mkdir创建文件夹;mv移动文件
15.png
15、通过cd 指令跳转目录
16.png
16、通过cat 指令查看文件内容
17.png

8 M4 i. S6 b8 P( [
17、经过以上步骤,DFS就移植完成
18、程序示例

  1. " N! u. K, `# B6 U6 p$ l% q' c  z

  2. ! Y7 i8 X9 B  _! i  G2 i
  3. //文件系统示例
    ! @$ I8 ^. j6 V) N# A" G
  4. void FileSystem_examples(){  \$ q& c/ _! h, K2 K2 j0 a- m
  5.         ( s6 `; ?( V- |  v1 O8 |
  6.    char s[] = "RT-Thread Programmer!", buffer[80];
    * h0 N& I4 [8 e) a; d+ i6 P
  7.           rt_device_t dev;
    + \) m' P8 `! b
  8.      int ret;$ h/ R0 I4 p3 ^8 I/ _% |
  9.                 int fd, size;+ c2 c% I8 W, j& J4 L. {
  10.        while(1)
    9 G/ y% l6 f9 C
  11.        {
    7 ^% i" N* z  s; v  S
  12.            dev = rt_device_find("flash0");//查找设备
    $ Y% o- _' C- [- `5 R9 ^1 U- R6 ^0 y
  13.            if (dev != RT_NULL)
    ( _8 P3 u- h3 V+ L
  14.               {
      W# H& B" j" X$ n
  15.                                                         //挂载文件系统8 g: \/ p$ m3 G/ H, ^0 ~+ B
  16.                                                 if(dfs_mount("flash0", "/", "elm", 0, 0) == 0)
    ) T  W- _% w8 Y
  17.                                                                 {& l# Z8 ^8 P& S4 N' m& D" {5 H
  18.                                                                 rt_kprintf("spiflash mount to /spi !\n");1 l! I: w! G8 s# q2 e& o
  19. % w! o+ l$ H1 e9 W$ q9 M( g
  20.                                                                 ret = mkdir("/test", 0x777);//创建在根目录test文件夹5 H: h; ~6 I2 `$ b; S. d
  21.                                                 ' B. n. D4 Q7 T0 q# K
  22.                                                                 //写模式打开文件,如果文件不存在则创建text.txt文件
    ! g" D4 ~+ n; ~0 J5 g4 f
  23.                                                                 fd = open("/test/text.txt", O_WRONLY | O_CREAT);5 r# \& J4 q( r5 [; G
  24.                                                                 if (fd >= 0)
    " q  R4 I* |/ F0 B7 n4 ?
  25.                                                                 {( ]8 Y4 Z( h  w+ [% G
  26.                                                                 write(fd, s, sizeof(s));
    6 Y- J! G" k. A; y% L( o
  27.                                                                 close(fd);
    - _. N" {7 c0 O: H: G4 d
  28.                                                                 rt_kprintf("Write done.\n");
    / m! D! @7 D) X8 c- w" |( m
  29.                                                                 }+ u. X* n) s3 H1 P

  30. & I( ^; u9 O  \8 Q$ @8 G
  31.                                                                 //读模式打开test件4 l* E. T+ x, S& T
  32.                                                                 fd = open("/test/text.txt", O_RDONLY);
    3 |7 @# m) a9 s6 R: @5 f+ X
  33.                                                                 if (fd >= 0)( P, U9 V/ }- p8 u; n
  34.                                                                 {
    ; D* C6 b: w8 z" y( C) x
  35.                                                      read(fd, buffer, sizeof(buffer));
    * r  ]/ V/ T0 w4 N) q( b
  36.                                                                   close(fd);& M' Z" S% X: }, `0 q
  37.                                                                  rt_kprintf("Read file test.txt : %s \n", buffer);
    7 t+ b: `# K- V, e5 h" h! b' {
  38.                                                                
    ) ~+ O) ^* ^" l6 x2 F/ i
  39.                                                              break;  N8 A- I) f5 A( v
  40.                                                                 }! s& X  p8 P% C( J
  41.                                        
    + r3 l. s: h/ Z5 X
  42.                                                 + @4 l- g# C5 x4 n" b+ z
  43.                                                         }
    1 A& h$ D  ~9 D3 A* R
  44.                                                                 4 g/ k+ z0 M: x; J
  45.                                                                 else' g7 o) e! l8 ~4 D5 ]* W% D; C
  46.                                                                 rt_kprintf("spiflash mount to /spi failed!\n");. d( A0 f" W8 k
  47.                                                                 break;7 X$ e$ \* `7 F; I7 I( k

  48. 6 u/ \( p$ b0 x, l! L" }
  49.         
    + h; B' [* }1 y' L
  50. }
    , e: `1 H+ p" P4 J5 z/ E
  51.                          }( z8 x( Q3 i+ u3 L
  52.                  }
复制代码

  ^7 K! \+ w8 Q  W; [源码参考:https://www.stmcu.org.cn/module/forum/thread-621278-1-1.html里面的资料! ?  ]4 `( a9 _2 M$ N$ s6 @

& K, c4 |1 g2 S* s, t  d/ M% s9 S8 F. z
收藏 评论2 发布时间:2019-7-31 15:20

举报

2个回答
wangallenwang 回答时间:2019-8-7 16:28:09
wangallenwang 回答时间:2019-8-16 17:23:50

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版