OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 3935|回复: 11

学习了一段时间,特分享个F4的SPI接口FATFS的SD卡IAP程序

[复制链接]

  离线 

4

主题

94

帖子

1

精华

高级会员

Rank: 4

积分
755
金钱
755
注册时间
2012-5-27
在线时间
84 小时
发表于 2015-2-6 10:31:49 | 显示全部楼层 |阅读模式
正点原子公众号

内容如题,

参考了原子哥的F4手册里面串口IAP,并且还用了hexiaolong2008网友的基于103的SDIO的IAP思路(http://www.openedv.com/posts/list/16218.htm)

在此特提出感谢,然后想着用F4应该也是可以的,就参考着做了一个,最后发现程序下载速度确实很快,没有做屏幕显示,开机检测按键是否按下了,如果按下了就进去固件更新的程序,然后用了一个LED灯用来显示当前的状态,没有加屏幕显示,这样的话可以把bootloader做到最小。

[C] 纯文本查看 复制代码
#define APP_START_ADDR (FLASH_BASE|0X4000)

定义了APP的入口地址,具体地址的设定可以参考原子哥F4手册中对F4系列芯片地址块的分配,我用的第一个块16KB用来放BootLoader,原子哥用的是64KB,跟我这个有点不一样。


[C] 纯文本查看 复制代码
int main(void)
{
	KEY_Init();
	if(KEY == 0)
	{
		FirmwareUpdate();
	}
	JumpToApp(APP_START_ADDR);
	while(1)
	{
	}
}

主函数如上所示,就是检测按键是否按下,如果按下后就进入了固件更新,没有按下就跳到APP中。


其中BootLoader的地址应该配置如下图:


然后对于APP需要做以下的修改,首先是IROM1的地址:


这个修改应该和IAP.h中的宏定义一致:

[C] 纯文本查看 复制代码
#ifndef __IAP_H
#define __IAP_H

#include \"stm32f4xx.h\"
#include \"stm32f4flash.h\"

#define APP_START_ADDR (FLASH_BASE|0X4000)

void JumpToApp(u32 AppAddr);
void FirmwareUpdate(void);

#endif

然后就是APP的main函数中需要加一句话:

[C] 纯文本查看 复制代码
SCB->VTOR=APP_START_ADDR;

这个是用来更改中断向量表的。



这样就可以进行IAP更新了,先按住PA0,然后再按住复位,或者按住PA0后进行上电,就会自动检测SD卡中的Update.bin是否存在,如果存在就会进行IAP的更新。

[C] 纯文本查看 复制代码
res = f_open(&UpdateFiles,\"Update.bin\",FA_OPEN_EXISTING|FA_READ);

感觉这样更新固件的方式挺快的,就是一瞬间就完了。

现在把源代码奉上,以供参考,转载请注明openedv。



最后对hexiaolong网友和原子哥进行无比的感谢,另外可能我发错版面了,如果又必要的话,原子哥可以进行移动。

(F103由于FLASH块分配的原因并不适用这种方法,但是对于F4而言,不论是SDIO还是SPI,也只是把底层给更改后即可,都适用于这种方法)


BootLoader407_V0.1.zip

511.36 KB, 下载次数: 1081

APP407_V0.1.zip

735.71 KB, 下载次数: 1055

回复

使用道具 举报

  离线 

499

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
129612
金钱
129612
注册时间
2010-12-1
在线时间
1163 小时
发表于 2015-2-6 11:12:43 | 显示全部楼层
不错,谢谢分享。cool。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

59

主题

4819

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
5844
金钱
5844
注册时间
2012-11-26
在线时间
1155 小时
发表于 2015-2-6 11:28:20 | 显示全部楼层
收藏了 感谢楼主分享
道不同,不相与为谋
回复 支持 反对

使用道具 举报

  离线 

4

主题

94

帖子

1

精华

高级会员

Rank: 4

积分
755
金钱
755
注册时间
2012-5-27
在线时间
84 小时
 楼主| 发表于 2015-2-6 11:29:19 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
哇 竟然是原子哥 还给置COOL了 泪奔中。。。。
回复 支持 反对

使用道具 举报

  离线 

499

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
129612
金钱
129612
注册时间
2010-12-1
在线时间
1163 小时
发表于 2015-2-6 23:39:55 | 显示全部楼层
正点原子公众号
回复【4楼】STM32F103:
---------------------------------
必须的啊,好资料自然cool
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

13

主题

206

帖子

1

精华

高级会员

Rank: 4

积分
613
金钱
613
注册时间
2014-10-26
在线时间
32 小时
发表于 2015-12-31 16:29:21 | 显示全部楼层
你这个程序,为什么我每次烧进去之后,想再次下载都会出现 Invalid ROM Table,只能通过 ISP 擦出芯片才能再用, ~
学习!
回复 支持 反对

使用道具 举报

  离线 

18

主题

239

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2014-8-5
在线时间
210 小时
发表于 2016-1-2 22:05:08 | 显示全部楼层
谢谢楼主分享,参考学习学习
回复 支持 反对

使用道具 举报

  离线 

4

主题

94

帖子

1

精华

高级会员

Rank: 4

积分
755
金钱
755
注册时间
2012-5-27
在线时间
84 小时
 楼主| 发表于 2016-1-3 10:48:48 | 显示全部楼层
q27488 发表于 2015-12-31 16:29
你这个程序,为什么我每次烧进去之后,想再次下载都会出现 Invalid ROM Table,只能通过 ISP 擦出芯片才能再 ...

这个问题我之前没有遇到过,是不是应该按着复位才可以进行?而且我的SD卡使用的是SPI接口的,不是SDIO接口的。
回复 支持 反对

使用道具 举报

  离线 

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-2-7
在线时间
5 小时
发表于 2016-8-12 20:56:48 | 显示全部楼层
cool,标记学习学习
年轻即出发, 一天两天算不了什么。hold~
回复 支持 反对

使用道具 举报

  离线 

9

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-4-26
在线时间
64 小时
发表于 2017-5-22 15:46:27 | 显示全部楼层
过来学习下。
以我资质之驽钝,当平心静气、循序渐进、稳扎稳打,不辜负他人勉励。
回复 支持 反对

使用道具 举报

  离线 

1

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2018-1-30
在线时间
22 小时
发表于 2018-3-14 14:34:45 | 显示全部楼层
你好我移植你的程序遇到问题可否加QQ请教一下谢谢了(467200539),已经卡在这个问题好几天了
回复 支持 反对

使用道具 举报

  离线 

2

主题

330

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1146
金钱
1146
注册时间
2012-5-8
在线时间
190 小时
发表于 2018-6-28 21:33:31 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

"原子哥”推荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-7-17 03:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */