美文网首页
2019-01-12 用esp-open-rtos实现8285上

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

作者: 探索的足迹 | 来源:发表于2019-04-08 05:31 被阅读0次

    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 方式,否则:如下

    相关文章

      网友评论

          本文标题:2019-01-12 用esp-open-rtos实现8285上

          本文链接:https://www.haomeiwen.com/subject/fdjqdqtx.html