怎样挂载spi flashlinux磁盘分区挂载到文件系统中的目录下

在spi-flish上设置分区_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
在spi-flish上设置分区
上传于||文档简介
&&n21​x​ ​a​r​m​芯​片​在​s​p​i​-​f​l​i​s​h​上​设​置​分​区​步​骤
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢1125人阅读
ArmflySTM32F103ZEV3开发板(11)
软件环境:Win7,Keil MDK 4.72a, IAR EWARM 7.2, GCC 4.2,Python 2.7 ,SCons 2.3.2
硬件环境:Armfly STM32F103ZE-EK v3.0开发板
参考文章:
Github托管的分支中examples目录中spi flash的例程
在RT-Thread默认的是SD卡作为文件系统挂载,需要加入相关驱动文件,操作如下:
【1】加入SPI总线驱动
在stm32f107分支的driver目录下有platform.c 平台初始化文件、rt_stm32f10x_spi.c和rt_stm32f10x_spi.h两个spi总线驱动文件,把它们复制到stm32f103ze-ek分支的driver中,并将platform.c重命名成rt_spi_flash_device.c结果如下:
【2】加入SPI Flash设备驱动
在RT-Thread 官方的Git 托管库中有开源项目,在driver目录下面有SPI Flash驱动文件spi_flash_w25xx.c和spi_flash_w25xx.h两个文件,把它们复制到stm32f103ze-ek分支的driver中,结果如下:
这样我们就在stm32f103ze-ek分支中加入SPI Flash相关驱动。
【3】将SPI Flash文件加入项目中
打开KeilMDK,在左侧的项目管理树中点开driver分支,然后按下图所示单击右键点击&Add Existing Fils to...&按钮。
定位stm32f103ze-ek/drive目录,将上面刚刚复制的文件选中,如下图:
然后点击&Add&按钮,完成添加,点击“close”按钮关闭对话框。
用同样的办法在rt-thread-1.2.2\components\drivers\spi目录中找到spi_core.c,spi_dev.c两个文件加入到工程的DeviceDrivers组中,结果如下:
【4】打开rtconfig.h配置文件,开启文件DFS系统支持选项,定位到83行附近,修改如下:
/* SECTION: device filesystem */
#define RT_USING_SPI
#define RT_USING_SPI_FLASH
#define RT_USING_DFS
#define RT_USING_DFS_ELMFAT
#define RT_DFS_ELM_WORD_ACCESS
/* Reentrancy (thread safe) of the FatFs module. &*/
#define RT_DFS_ELM_REENTRANT
/* Number of volumes (logical drives) to be used. */
#define RT_DFS_ELM_DRIVES 2
/* #define RT_DFS_ELM_USE_LFN 1 */
/* #define RT_DFS_ELM_CODE_PAGE 936 */
#define RT_DFS_ELM_MAX_LFN 255
/* Maximum sector size to be handled. */
#define RT_DFS_ELM_MAX_SECTOR_SIZE &<span style="color:#ff &/*SPI Flash Sector size*/
/* the max number of mounted filesystem */
#define DFS_FILESYSTEMS_MAX 2
/* the max number of opened files& */
#define DFS_FD_MAX
修改完成后保存。
【5】修改application.c
打开application.c,定位到45行附近,加入如下代码:
extern void rt_spi_flash_device_init(void);
打开application.c,定位到101行附近,加入如下代码:
rt_spi_flash_device_init();
#ifdef &RT_USING_FINSH
& & finsh_set_device(RT_CONSOLE_DEVICE_NAME);
#endif &/* RT_USING_FINSH */
& & /* Filesystem Initialization */
#if defined(RT_USING_DFS) && defined(RT_USING_DFS_ELMFAT)
& & &/* mount SPI flash as root directory */&
& & if (dfs_mount(&flash0&, &/&, &elm&, 0, 0) == 0)
& & & & rt_kprintf(&flash0 mount to /.\n&);
& & & & rt_kprintf(&flash0 mount to / failed.\n&);
#endif &/* RT_USING_DFS */
#ifdef RT_USING_RTGUI
extern void rt_hw_lcd_init();
extern void rtgui_touch_hw_init(void);
rt_device_
/* init lcd */
rt_hw_lcd_init();
#ifdef RTGUI_USING_TOUCHPANEL
/* initilize touch panel */
rtgui_touch_hw_init(&spi12&);
#endif /* RTGUI_USING_TOUCHPANEL */
/* find lcd device */
lcd = rt_device_find(&lcd&);
/* set lcd device as rtgui graphic driver */
rtgui_graphic_set_device(lcd);
#ifndef RT_USING_COMPONENTS_INIT
/* init rtgui system server */
rtgui_system_server_init();
#endif /*RT_USING_COMPONENTS_INIT*/
#ifdef RTGUI_USING_CALIBRATION
calibration_set_restore(cali_setup);
calibration_set_after(cali_store);
calibration_init();
#endif /* #ifdef RTGUI_USING_CALIBRATION */
#endif /* RT_USING_RTGUI */
#ifdef RT_USING_USB_HOST
/* register stm32 usb host controller driver */
rt_hw_susb_init();
rt_thread_delay(50);
rt_device_init_all();
修改完成后保存。
【6】打开rt_spi_flash_device.c,看到有关spi底层初始化代码,这时对照开发板原理图,可以看到STM32F103ZE-EK开发板上使用的是SPI Flash芯片型号是SST25VF016B,和CPU连接引脚的原理图如下:
可以看出,原理图上的SPI Flash用到的引脚分别是PA6(MISO),PA7(MOSI),PA5(SCK),其片选信号是PB2引脚,同样还使用SPI1总线的是LCD液晶的触摸屏芯片XTP2046,片选信号是PG11,如下图:
因此我们在修改代码时也需要将其指定为SPI1,在rt_spi_flash_device.c中修改成如下代码:
#ifdef RT_USING_SPI
#include &rt_stm32f10x_spi.h&
#include &spi_flash_w25qxx.h&
#endif&&/* RT_USING_SPI */
&* SPI1_MOSI: PA7
&* SPI1_MISO: PA6
&* SPI1_SCK : PA5
&* SPI Flash CE: PB2&
&* Touch Panel CS: PG11&
#ifdef RT_USING_SPI
static void rt_hw_spi_init(void)
& & /* register spi bus */
& & & & static struct stm32_spi_bus stm32_
& & & & GPIO_InitTypeDef GPIO_InitS
& & & & /* Enable GPIO clock */
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
& & & & GPIO_InitStructure.GPIO_Pin & = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
& & & & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
& & & & GPIO_InitStructure.GPIO_Mode &= GPIO_Mode_AF_PP;
& & & & GPIO_Init(GPIOA, &GPIO_InitStructure);
& & & & stm32_spi_register(SPI1, &stm32_spi, &spi1&);
& & /* attach spi flash cs */
#ifdef RT_USING_SPI_FLASH
& & & & static struct rt_spi_device spi_
& & & & static struct stm32_spi_cs &spi_
& & & & GPIO_InitTypeDef GPIO_InitS
& & & & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
& & & & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
& & & & /* spi11: PB2 */
& & & & spi_cs.GPIOx = GPIOB;
& & & & spi_cs.GPIO_Pin = GPIO_Pin_2;
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
& & & & GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_P
& & & & GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin);
& & & & GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure);
& & & & rt_spi_bus_attach_device(&spi_device, &spi11&, &spi1&,(void*)&spi_cs);
#endif /* RT_USING_SPI_FLASH */
#ifdef RTGUI_USING_TOUCHPANEL
/* attach touch panel cs */
& & & & static struct rt_spi_device spi_
& & & & static struct stm32_spi_cs &spi_
& & & & GPIO_InitTypeDef GPIO_InitS
& & & & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
& & & & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
& & & & /* spi21: PG11 */
& & & & spi_cs.GPIOx = GPIOG;
& & & & spi_cs.GPIO_Pin = GPIO_Pin_11;
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
& & & & GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_P
& & & & GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin);
& & & & GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure);
& & & & rt_spi_bus_attach_device(&spi_device, &spi12&, &spi1&, (void*)&spi_cs);
#endif /* RTGUI_USING_TOUCHPANEL */
#endif /* RT_USING_SPI */
void rt_spi_flash_device_init(void)
#if defined(RT_USING_DFS) && defined(RT_USING_DFS_ELMFAT)&
& & w25qxx_init(&flash0&, &spi11&);
#endif /* RT_USING_DFS && RT_USING_DFS_ELMFAT */
修改完毕后保存,如果一切顺利,应该编译能够通过,将在下篇文章中研究关于组件初始化问题。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:17834次
排名:千里之外
原创:19篇
(2)(5)(4)(3)(1)(3)(2)(1)RT-Thread相关技术讨论,包括使用,编译等一般性的讨论
Moderators: ,
& Page 1 of 1
& 2014年 Jan 12日 17:45
芯片stm32f103VB RT_Thread版本1.2.0,想要挂载SPI Flash,在finsh中mkfs(“elm”,“flash1”)中出现如下。Code: finsh&&mkfs (&elm&,&flash1&)-----LINE = 198----------LINE = 205----------LINE = 208----------LINE = 243----------LINE = 245----------LINE = 249----------LINE = 251-----psr: 0xr00: 0x20001fe0r01: 0xr02: 0xf0000000r03: 0xr04: 0xffffffecr05: 0xr06: 0xr07: 0xr08: 0xr09: 0xdeadbeefr10: 0xdeadbeefr11: 0xdeadbeefr12: 0x&lr: 0x&pc: 0xhard fault on thread: tshell&thread &pri &status & & &sp & & stack size max used & left tick &error-------- ---- ------- ---------- ---------- ---------- ---------- ---tshell & 0x14 ready & 0xxx000002bc 0xtidle & &0x1f ready & 0xxxx0timer & &0x04 suspend 0xxxxbus fault:SCB_CFSR_BFSR:0x04 IMPRECISERR 我跟踪程序发现是在这个函数里面死掉的f_mount((BYTE)index, RT_NULL);求助各位大神
Joined: 2013年 Aug 7日 22:45
& 2014年 Jan 13日 15:10
看来我问的问题没有技术水平呀,还是我自己一点一点的调试解决吧!
Joined: 2013年 Aug 7日 22:45
& 2014年 Jan 13日 15:22
因为大家没有一个统一的硬件平台,所以也无法知道你的具体情况是什么样的,具体的代码又是什么样的这个也就是realboard的意义所在吧,我们希望硬件平台能够收敛些,有问题也容易定位
Joined: 2008年 May 10日 07:22
& 2014年 Jan 19日 16:24
这个问题我已经解决了,是我自己不够仔细。我今天搜帖子发现早已经有人遇到过了。Code: #define RT_DFS_ELM_MAX_SECTOR_SIZE &512这个值应该改为4096,因为我的flash块就是这么大的,谢谢熊老大
Joined: 2013年 Aug 7日 22:45
& 2014年 Jan 19日 16:28
所以,一般来说提出问题需要给出足够的信息:1. 硬件信息;2. 版本信息;3. 代码情况&如果是驱动,驱动从哪里来的,自己写的,从bsp中修改的&4. 一些log情况类似lz这个,SPI flash的问题,扇区与fatfs默认扇区大小不匹配是很常见的一个问题。
Joined: 2008年 May 10日 07:22
& 2014年 Jan 20日 00:50
lifan_cn wrote:这个问题我已经解决了,是我自己不够仔细。我今天搜帖子发现早已经有人遇到过了。Code: #define RT_DFS_ELM_MAX_SECTOR_SIZE &512这个值应该改为4096,因为我的flash块就是这么大的,谢谢熊老大大部分只要你的SPI驱动正常就是这样这个问题了。
Joined: 2012年 May 2日 21:12
& 2014年 Feb 13日 13:36
扇区与fatfs默认扇区大小不匹配是很常见的一个问题。
Joined: 2014年 Feb 12日 14:32
& 2014年 Feb 13日 21:00
所以在github中的版本,在fatfs mount的时候,加入一个扇区大小的检查,如果小了给出提示信息,并mount失败。
Joined: 2008年 May 10日 07:22
Display posts from previous: All posts1 day7 days2 weeks1 month3 months6 months1 year
Sort by AuthorPost timeSubject AscendingDescending
& Page 1 of 1
Select a forum
------------------
RT-Thread讨论区
& &RT-Thread发布
& &RT-Thread一般讨论
& &RT-Thread组件
& &RT-Thread English
合作半导体厂商专区
& &Spansion 微控制器
& &NXP LPC系列微控制器
& &四轴飞控
& &ART项目
& &RealTouch触摸屏[已停止更新]
& &音频播放器DIY
& &STM32网络收音机[完成]
& &人机界面 HMI[不再继续]
综合讨论区
& &嵌入式技术综合讨论
& &商务版面
Who is online
Users browsing this forum: No registered users and 13 guests>> STM32的SPI Flash文件系统实验
STM32的SPI Flash文件系统实验
所属分类:
下载地址:
w25qxx.rar文件大小:2.38 kB
分享有礼! 》
请点击右侧的分享按钮,把本代码分享到各社交媒体。
通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。
华邦W25Qxx spi flash&在&NXP&LPC17xx_LPC18xx平台的驱动,可轻松移植到其它平台.
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
6.33 kB12-09-12 16:46
2.25 kB11-09-12 17:17
(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
23 篇源代码 21 篇源代码 18 篇源代码 13 篇源代码 9 篇源代码
285 篇源代码 173 篇源代码 48 篇源代码 42 篇源代码 36 篇源代码
评价成功,多谢!
下载w25qxx.rar
CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了
您的积分不足,优惠套餐快速获取 30 积分
10积分 / ¥100
30积分 / ¥200原价 ¥300 元
100积分 / ¥500原价 ¥1000 元
订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。
支付宝支付宝付款
微信钱包微信付款
更多付款方式:、
您本次下载所消耗的积分将转交上传作者。
同一源码,30天内重复下载,只扣除一次积分。
鲁ICP备号-2 runtime:Elapsed:113.931ms - init:0.2;find:1.5;t:0.5;tags:0.7;related:107.3;comment:0.4; .206
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
^_^"呃 ...
Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧

我要回帖

更多关于 linux挂载分区原目录 的文章

 

随机推荐