本帖最后由 gaupen1186 于 2013-1-20 23:39 编辑
最近一直忙的不可开交,自从6号拿到板子,一直没怎么顾得上深入玩玩,那陀螺仪跟加速度传感器真是挺诱人的,只可惜还没时间去弄。本来打算趁着这个周末玩玩呢,谁知两天都临时有事,昨天去火车站接人,今天又去郑州东站接人,还偏偏赶上下大雪晚点,弄到刚才11:10分才回到家里,到现在肚子还空着呢。。。万幸的是,昨天晚上提前写了点,现在离21号零点还差半小时呢,终于能多少拿出点东西来,要不然就悲剧了,怎么对得起ST跟21ic辛辛苦苦为咱着想呢!好了,下面进入正题,把word贴上来,然后煮点面吃去。。。等我吃饱喝足,再来继续完善帖子。
在Mini STM32中移植RL-FlashFS
嵌入式文件系统现在非常流行,常用的嵌入式文件系统有FATfs,ZLGfs,znFAT等,虽然它们各有优点吧,但总归是一个独立的文件系统,移植到STM32 F3上还是需要费一番功夫的。
RL_FlashFS是Keil ARM自家的嵌入式文件系统,包含在arm mdk专业版本中。其实,RL-FlashFS是RL-ARM的一部分,它可以脱离RTX内核独立运行。不得不说,keil给我们提供了一个非常好的开发环境,有操作系统,协议栈,文件系统,usb,can。相对于其他文件系统,RL_FlashFS的移植还是非常简单的,因为keil已经为我们做好了很多很多工作,我们需要做的已经很少了,另外,keil也提供了非常详尽的移植手册,步骤,范例等。
在性能方面,keil也提供了非常详细的数据,如下:
Board
| Device | CPU Core | CPU Speed
[MHz] | Card Interface | Write
[KB/s] |
Read
[KB/s]
|
AT91SAM9260-EK
| Atmel AT91SAM9160 | ARM9 | 96.1 | SD4 at 25MHz | 4785.0 |
5044.0
|
AT91SAM9261-EK
| Atmel AT91SAM9161 | ARM9 | 96.1 | SD4 at 25MHz | 4790.6 |
5069.3
|
AT91SAM9G20-EK
| Atmel AT91SAM9G20 | ARM9 | 99.1 | SD4 at 25MHz | 4899.5 |
5418.0
|
AT91SAM9RL-EK
| Atmel AT91SAM9RL64 | ARM9 | 100.0 | SD4 at 25MHz | 4096.0 |
5211.2
|
MCB2400
| NXP LPC2468 | ARM7 | 48.0 | SD4 at 24MHz | 4084.3 |
5525.9
|
MCB2300
| NXP LPC2368 | ARM7 | 48.0 | SD4 at 24MHz | 3946.3 |
5330.6
|
MCB2140
| NXP LPC2148 | ARM7 | 60.0 | SPI at 7.5MHz | 299.4 |
313.4
|
MCBSTR9
| ST STR912 | ARM9 | 48.0 | SPI at 12MHz | 355.2 |
357.1
|
MCBSTR750
| ST STR750 | ARM7 | 60.0 | SPI at 15MHz | 402.2 |
416.1
|
MCBSTM32
| ST STM32 | Cortex-M3 | 72.0 | SPI at 18MHz | 711.1 |
758.1
|
LM3S8962
| Luminary LM3S8962 | Cortex-M3 | 50.0 | SPI at 12.5MHz | 537.8 |
607.6
|
LM3S6965
| Luminary LM3S6965 | Cortex-M3 | 50.0 | SPI at 12.5MHz | 539.2 |
603.6
|
LM3S3768
| Luminary LM3S3768 | Cortex-M3 | 50.0 | SPI at 12.5MHz | 539.5 |
603.8
|
从上表可以看出,STM32的F1系列,在72Mhz的spi18Mhz模式下,已经能达到七百多KB/s的读写速度,说明RL_FlashFS的性能还是非常不错的。
(这些数据都可以从keil Arm MDK的帮助手册中找到。下面的移植步骤也是参考自其中,只是另外修改增加了一些个人心得与注意事项。)
不再废话这么多了,下面就进入正题,开始真正的移植。
首先,从整体上来概括一下:
第一,肯定是先创建好工程文件,初始化mcu等等一些列必须的事情,然后就是拷贝RL_FlashFS相关的文件,添加进工程内,下面是配置spi接口,然后修改spi与sd卡的接口函数,最后最后调试烧写。
一、 从mdk安装目录内拷贝File_Config.c、FS_CM3.lib、fs_time.c、Retarget.c、SPI_STM32F103.c到自己工程文件夹内。
二、 添加File_Config.c、FS_CM3.lib、fs_time.c、Retarget.c、SPI_STM32F103.c到工程中。 三、 在main.c主函数文件中添加头文件RTL.h。
四、 打开File_Config.c,切换到 Configuration Wizard 模式,如图配置完成后切换回代码编辑模式并保存。
五、 修改SPI_STM32F103.c文件中关于spi以及片选CS的配置。(很关键很重要的一步)
1. Init(),UnInit(),Send,SendBuf,RecBuf,BusSpeed函数一般不需要改动。
2. SetSS(u32 ss)函数,也就是SD卡片选函数。除函数名不变,函数内部全部重写,(按如下思路),先设置gpio为推挽输出(这个都会吧?太简单了,直接写寄存器或者用库函数都行),然后判断参数ss为0时,片选CS拉低,ss为非0时,片选CS拉高。
3. CheckMedia函数。如果你的硬件用到了SD卡写保护,那么只需要将其修改成对应的gpio就行。如果没用到写保护,那更简单,直接来一句“stat |= M_INSERTED;”将此函数写死。
六、 对于STM32平台,到此就移植完毕,你可以尽情的参照帮助文件里相关函数来操作SD卡了。
|