当前位置: 首页 > news >正文

瑞昌建站公司北京网站建设类岗位

瑞昌建站公司,北京网站建设类岗位,深圳做网站行业,wordpress 加背景音乐开发环境 windowssimplicity studio 5geck sdk 4.1 一 bootloader 新建BGAPI UART DFU工程 工程新建完成以后看一下linkerfile.ld文件的flash和ram的配置跟自己的application工程是否对应得上 配置串口波特率和引脚 默认使用PB0进入bootloader模式#xff0c;这里改成Non…开发环境 windowssimplicity studio 5geck sdk 4.1 一 bootloader 新建BGAPI UART DFU工程 工程新建完成以后看一下linkerfile.ld文件的flash和ram的配置跟自己的application工程是否对应得上 配置串口波特率和引脚 默认使用PB0进入bootloader模式这里改成None 二 准备bt_host_uart_dfu.exe geck sdk里面提供了bt_host_uart_dfu.exe的源码但是需要自己编译。windows环境需要使用MinGW工具linux使用make指令直接就可以编译出可执行文件。 2.1 安装MinGW 下载地址 https://sourceforge.net/projects/mingw-w64/files/ MinGW-W64-install.exe是在线安装经常会提示错误在这里建议直接下载x86_64-win32-seh。 下载完之后直接解压出来即可。 将bin的路径设置到环境变量Path中 在cmd界面中执行gcc -v显示版本号说明安装成功。 2.2 编译 bt_host_uart_dfu的源码在gecko_sdk\app\bluetooth\example_host\bt_host_uart_dfu目录下 在该目录下使用shell power执行命令 mingw32-make 生成exe 不出意外在exe目录下生成了一个bt_host_uart_dfu.exe 三 升级 首先当前固件需要能够接收串口发送过来的数据。 将bt_host_uart_dfu.exe 和 application.gbl放在同一个文件夹里面在该文件夹下打开power shell执行如下指令 .\bt_host_uart_dfu.exe -u COM14 -f -l 4 -b 115200 .\application.gbl-u指定串口号-f 表示禁止使用流控-l 4 指定log日志级别-b 指定波特率 特别注意bt_host_uart_dfu.exe默认是开启流控的如果你的bootloader没有开启流控一定要加上-f参数否者你会看到数据发出来了但是对方却怎么也收不到 bt_host_uart_dfu.exe 执行的最初会发送指令20 00 FF 02固件收到这个数据之后就进入bootloader模式。 #define BOOTLOADER_RESET_REASON_BOOTLOAD 0x0202u #define BOOTLOADER_RESET_SIGNATURE_VALID 0xF00Fu #define SRAM_BASE (0x20000000UL) void bootloader_mode(void) {BootloaderResetCause_t *cause (BootloaderResetCause_t *) (SRAM_BASE);cause-reason BOOTLOADER_RESET_REASON_BOOTLOAD;cause-signature BOOTLOADER_RESET_SIGNATURE_VALID;CHIP_Reset(); }之后不出意外就可以升级成功了。 四 改进bootloader BGAPI默认是单区更新的也就是bootloader会把收到的新固件直接覆盖掉原来的固件。如果在升级的过程中被中断了那么设备将一直处于bootloader模式。 通过下面几步操作可以实现双区更新并且升级过程被中断还可以启动老的固件。 修改btl_bootloader.c的flashData函数 static void flashData(uint32_t address,uint8_t data[],size_t length) {const uint32_t pageSize (uint32_t)FLASH_PAGE_SIZE;//ching: 默认是写到了0x4000地址这里改成0x5C000地址处address传过来的地址默认以0x4000为基地址address 360448;//0x5C000 - 0x4000 360448, 加360448偏移到0x5C000地址处// Erase the page if write starts at a page boundaryif (address % pageSize 0UL) {flash_erasePage(address);}// Erase all pages that start inside the write rangefor (uint32_t pageAddress (address pageSize) ~(pageSize - 1UL);pageAddress (address length);pageAddress pageSize) {flash_erasePage(pageAddress);}flash_writeBuffer_dma(address, data, length, SL_GBL_MSC_LDMA_CHANNEL); }修改btl_bootloader.c的bootload_applicationCallback函数 #define PACK_LEN 1024 /*** ching:* brief 将0x5C000地址处的固件全部搬运到0x4000地址处* param length 已经接收到的新固件长度*/ static void install_application(uint32_t length) {const uint32_t pageSize (uint32_t)FLASH_PAGE_SIZE;uint32_t bak_address 0x5C000;uint32_t write_address 0x4000;uint8_t buffer[PACK_LEN];uint16_t seg length / PACK_LEN;if(length % PACK_LEN){seg 1;}LOGD(seg: %d\n, seg);for(int i 0; i seg; i){LOGD(write_address: %08x\n, write_address);if(write_address % pageSize 0){flash_erasePage(write_address);}memset(buffer, 0, PACK_LEN);memcpy(buffer, (uint32_t *)(bak_address i * PACK_LEN), PACK_LEN);flash_writeBuffer(write_address, buffer, PACK_LEN);write_address PACK_LEN;} } void bootload_applicationCallback(uint32_t address,uint8_t data[],size_t length,void *context) {static uint32_t app_length 0;(void)context;//ching: 使用一个特殊的长度值来判断是否进行搬运工作if(length 0xA5A5A5A5){//copy 0x5C000内容到0x4000 长度 app_lengthLOGD(all length: %d\n, app_length);install_application(app_length);app_length 0;return;}// Check if addresses to write to are within writeable spaceif ((address (uint32_t)(mainBootloaderTable-startOfAppSpace))|| ((address length) (uint32_t)(mainBootloaderTable-endOfAppSpace))) {BTL_DEBUG_PRINT(OOB 0x);BTL_DEBUG_PRINT_WORD_HEX(address);BTL_DEBUG_PRINT_LF();return;}//ching: 记录新固件的长度app_length length;flashData(address, data, length); }修改btl_comm_bgapi_common.c的bootloader_bgapi_communication_main函数 当收到更新完成指令后调用applicationCallback回调并传入len 0xA5A5A5A5 else if (command.header.class BGAPI_PACKET_CLASS_SYSTEM) {// BGAPI System commandswitch (command.header.command) {case SYSTEM_RESET:LOGD(Reset request\n);//ching: 长度传0xA5A5A5A5新固件已经接收完成开始搬运工作parseCb-applicationCallback(0, NULL, 0xA5A5A5A5, NULL);break; 完成以上步骤之后bootloader就实现了双区更新的功能。
http://www.w-s-a.com/news/332882/

相关文章:

  • 网站被降权了怎么办做网站网页维护手机App开发
  • 营销型网站建设熊掌号tomcat 网站开发
  • 东莞网站建设seo广州 flash 网站
  • js网站评论框租房网站那些地图区域统计怎么做的
  • 企业门户网站平台建设招标采购文件长沙做网站找哪家好
  • 关于实验室建设的英文网站图文分销系统开发
  • wordpress 媒体库管理自己的网站什么做优化
  • 网站建设基本流程价格厦门seo网站推广
  • 辽宁响应式网站建设价格企业所得税率
  • 网站编辑及seo招聘上海做网站公司做网站的公司
  • 杭州四喜做网站建设么ja.wordpress.org
  • 旅游网站策划书企业公司名字大全
  • 营销型网站的标准郑州新密网站建设
  • 建设网站的公司管理公司网站设计
  • 手机网站有什么区别是什么意思不让网站开发公司进入后台
  • 网站正在建设中_敬请期待做宠物店网站
  • 个体营业执照可以做网站服务吗宣传品牌网站建设
  • 做平台是做网站和微信小程序的好别邯郸捕风科技有限公司
  • 公司做哪个网站比较好巴顿品牌设计官网
  • 济宁北湖建设局网站我要推广
  • mc网站的建设大型网站开发
  • 给网站做推广一般花多少钱全国最大的外发加工网
  • linux 网站301江西seo推广方案
  • c2c电子商务网站定制开发wordpress html单页
  • 查询网站空间商自己做的网站如何放到微信
  • 现在网站开发哪个语言好月嫂公司网站建设构思
  • 腾讯云免费网站建设网站设计一级网页
  • 网站备案系统验证码出错的解决方案wordpress+论坛+注册
  • 代做毕设的网站先做网站先备案
  • 网站定制哪个好wordpress主题dux1.9