2019-01-12 用esp-open-rtos实现8285上的OTA

A基于自有服务器、B在1Mbyte的8285上基于RTOS来实现OTA。C.数据校验

一、8285存储结构

8285flash使用 w25q8 作为存储芯片,数据空间构成为1M*8bit, 寻址空间为 00000~0XFFFFF。依据参考在NONOS编译生成可OTA的固件时会生成两个文件,一个写入起始地址为0x1000,一个为0X81000可以看出:

1.固件的0x000~0xFFF,0x80000~0x80FFF应该存储了bootloader的引导代码(可能为Tensilica 上电复位地址和MCU的寄存器初始化等指令以及跳转至用户代码区等),0Xfc000-0xfdfff(乐鑫厂商的初始化数据存储区,例如如WIFI校正参数)用户代码1从0x01000~0x7ffff ,用户代码2从0x81000~0xfbfff ,0x7e000,和0xfC000的位置最好不要使用原因参考下图

来自ESPFlashDownload TOOL

2.用户使用时会存在有参数需要存储读取的情况,那么用户数据可以安排在代码0X7E000-0X1000*N,或者0XFC000-0X1000*N 开始的位置,用户数据存储时需要了解到FLASH空间是以bit为单位的,计算时需要将 int,long 的数据转换后考虑规划分配空间大小,以及分配的最小单位为块即0x1000。如需要100个char型数则100*8=800 需要分配0x7C000-0X1000=0X7B000 开始的空间,或者0XFB000开始的4096个bit里。

为确保AB程序切换不会越界,那么我就可以得出用户代码的最大体量。0XFC000-0X1000*1-0X1000-0X80000=0x7A000 即488K

3.升级的原理是将1Mbit的空间分为2块,相互切换,A代码运行时下载的更新程序存与B区,然后改写0Xfc000区域的启动文件位置标志位确定下次复位以后从0x1000,还是0x81000读取用户程序。

二、.对于esp-open-rtos SDK编译的环境与参数设定

esp-open-rtos 拥有巨多的samples 不用可惜啊!对于lubantu的linux环境用起来还是非常容易的,可惜单片机开发人员过于陌生。我来试着在WINDOWS环境下一步步搭建编译环境,并在vistual studio code上调试。

1.下载完代码打开目录结构

一头雾水没关系,直奔主题进入examples目录 里的ota_basic里

这里的makefile 文件是make 机制的关键

给2个变量 PROGRAM 和EXTRA_COMPONENTS 赋值,并引用了esp-open-rtos-master根目录下的common.mk 文件。

那么我们来读一读common.mk 的文件内容:

ROOT := $(dir $(lastword $(MAKEFILE_LIST)))   #### 取得 common.mk 的相对samples的路径即此RTOS的根目录 使用 $(warning the ROOT is: $(ROOT))可以查看

include $(ROOT)parameters.mk    ####引入关于芯片参数的设定文件  用户需要自行修改以适应自己的项目

ifndef PROGRAM   #检测 PROGRAM   变量 以确保common.mk引用前做了必要的初始化, 非单独执行

$(error "Set the PROGRAM environment variable in your Makefile before including common.mk")

endif

empty :=

space := $(empty) $(empty)  #由于makefile 的语法规则,需定义一个空格字符,字符串处理会用 

lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1))))))))))))))))))))))))))

#自定义函数lc 用于转换大写字符为小写

PROGRAM_DIR := $(dir $(firstword $(MAKEFILE_LIST))) #取得运行make 的目录

SDK_LIB_ARGS = $(addprefix -l,$(SDK_LIBS))

LIB_ARGS      = $(addprefix -l,$(LIBS))

PROGRAM_OUT  = $(BUILD_DIR)$(PROGRAM).out

LDFLAGS      += $(addprefix -T,$(LINKER_SCRIPTS))

FW_FILE = $(addprefix $(FIRMWARE_DIR),$(PROGRAM).bin)


___________________________________________________________________________


最新的IDF RTOS3.1 版本支持8285 

记得FLASH 使用四博智联的模块必须选择DOUT 方式,否则:如下


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容