crazyflie2_nrf51822程序分析--总体结构

为了尊重原始版本,将英文原文贴出来,同时将一些需要注意的地方加上我的注释

Source code of the firmware running in the Crazyflie 2.0 nRF51822. This microcontroller have a couple of roles:

  • Power management (ON/OFF logic and battery handling),功耗管理,打开/关闭stm32
  • Radio communication 无线通信
    • Enhanced Shockburst compatible with Crazyradio (PA) --- ESB
    • Bluetooth low energy using the Nordic Semiconductor S110 stack --- BLE也就是蓝牙
  • One-wire memory access 同时支持一线存储器访问,美信官方又看到类似DS18B20一总线的存储器芯片,这里扩展板会用到

Compiling with bluetooth support requires the nRF51_SDK and S110 packages.

官方的虚拟机中没有下载nRF51_SDK和蓝牙协议包S110,所以需要用下面的sh文件下载

    ./tools/build/download_deps.sh

will download the zips and unpack them. If you want to download manually from the Nordic semiconductor website, you will find the details in nrf51_sdk/readme and s110/readme.

Compiling

To compile arm-none-eabi- tools from https://launchpad.net/gcc-arm-embedded should be in the path.

Compilation options can be saved in config.mk. Main targets:

下载可以用make factory_reset,直接会将mbs, bootloader,S110和firmware全部下载进去

make                 # Make with BLE support
make BLE=0           # Make without BLE support
make BLE=0 S110=0    # Make without BLE and without Softdevice in flash (see bellow)

make flash           # Flash firmware with jtag
make factory_reset   # Erase device and flash softdevice, bootloaders, and firmware

Architecture

下面是重点,256K的flash,crazyflie2竟然分成了这么多块,好累!

When running without softdevice (S110=0) the firmware is loaded at the beginning of the flash and is running alone in the CPU.

When running with Softdevive (S110=1) independent of if BLE is activated or not, the flash is filled as follow:

+--------------+ 256k
|     MBS      |    Write protected
+--------------+ 252k
|  Bootloader  |
+--------------+ 232k
|              |
|              |
|              |
|              |
|              |
|  Firmware    |
+--------------+ 88K
|              |
|              |
|              |
|              |
|              |
|              |
|  Softdevice  |
+--------------+ 4K
|     MBR      |    Write protected
+--------------+ 0
  • MBR Softdevice Master Boot Record.  这个不用管
  • SoftDevice S110 Bluetooth stack  这个code看不到,用官方的hex文件就可以了,还有s120,s130等等
  • Firmware This firmware  飞行的时候用到的程序
  • Bootloader Bluetooth/Shockburst bootloader  下载Firmware用到的固件程序,通过长按按键可以进入bootloader
  • MBS Master Boot Switch  这个应该是可以更新bootloader

Boot sequence:(还好有这个上电之后程序走的顺序,要不然就搞蒙了)

 MBR ----> MBS ----> Bootloader ----> Firmware

The MBR is part of the Softdevice. It boots the CPU and jump to MBS. The MBR contains methods to start the Softdevice and can flash softdevice and bootloader.

The MBS handles the ON/OFF button and comunicate the duration of the press to the bootloader so that the bootloader knows what to boot. The reason for the MBS is to allow updating the bootloader over the air while still having a write-protected piece of software
that can start the STM32 in USB DFU mode for recovery (the STM32 has access to the NRF51 SWD programming port). The boot switch is as follow:

按键按住时间的长短不同会进入不同的程序,同时可以观察Blue LED,注意是nrf51822这边的LED,不是STM32的

Press time Blue LED state Program booted
Short Still Firmware
Long (>3s) Slow blink Bootloader
Very long (>5s) Fast blink Stays in MBS and power STM32 in USB DFU mode

The bootloader, if selected, starts the STM32 in bootloader mode and initialize both BLE and Shockburst (ESB) radio. It can flash everything but MBR and MBS. It also acts as a bridge to the STM32 bootloader.

If not selected, the bootloader jumps to the firmware.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 05:18:07

crazyflie2_nrf51822程序分析--总体结构的相关文章

crazyflie2_nrf51822程序分析--MBS

从之前对总体结构的介绍,参考crazyflie2_nrf51822程序分析--总体结构 可以看出来程序运行的顺序是MBR->MBS->Bootloader->Firmware,MBR我们动不了,所以先分析下MBS都做了什么事情,main函数主要做的事情如下: <span style="font-size:14px;">int main() __attribute__ ((noreturn)); int main() { press = press_none

zrender源码分析1:总体结构

开始 zrender(Zlevel Render) 是一个轻量级的Canvas类库,这里是GitHub的网址 点我, 类似的类库有Kinetic.JS.EaselJS. 但貌似都没有zrender好用(可能是更加符合国人的习惯),强大的图表工具echarts就是在zrender基础上建立, 用zrender和echarts做了两个关于canvas的两个可视化项目之后,忍不住看了下zrender的项目代码(也有需要修改源代码的缘故), 但是翻开之后,代码的结构比较清晰,注释也都是中文,比较容易读懂

小程序总体结构解析

项目结构 创建button目录 创建内层文件 js,json , wxml , wxss . 名字与外层文件相同. 创建外层文件,分别在创建内层 js,json,wxml,wxss.这样就生成了一个伪页面,说它是伪页面到后面进行分析. . js:javascript 逻辑代码区. . json:页面配置区. . wxml:类类似HTML布局区, . wxss:CSS样式区 , ( json 与 wxss 并不是必须的,可按照产品风格做调整),要说的是json多数使用在API接口中,在控件中几乎不

Android4.4深入浅出之SurfaceFlinger总体结构

Android4.4 GUI系统框架之SurfaceFlinger 一.             Android GUI框架: SurfaceFlinger:每当用户程序刷新UI的时候,会中介BufferQueue申请一个buffer(dequeueBuffer),然后把UI的信息填入,丢给SurfaceFlinger,SurfaceFlinger通过计算多重计算合成visibleRegion之后,丢给openGL层处理,处理之后送到显示器display上显示. 根据整个Android系统的GU

基于时间片轮转程序分析进程调度

张雨梅   原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 背景知识 一般程序运行过程中都会发生中断,发生中断时,CPU先把当前的内容保存,然后执行中断程序,中断返回时,根据保存的内容恢复现场.这次实验用一个简单的时间片轮转程序分析进程调度的过程. 实验过程 使用实验楼的虚拟机操作,实验代码在mykernel中找,包括3个c文件,mypcb.h,mymain.c,myinterrupt.c. 打开

Hadoop之MapReduce程序分析

摘要:Hadoop之MapReduce程序包括三个部分:Mapper,Reducer和作业执行.本文介绍和分析MapReduce程序三部分结构. 关键词:MapReduce   Mapper  Reducer   作业执行 MapReduce程序包括三个部分,分别是Mapper,Reducer和作业执行. Mapper 一个类要充当Mapper需要继承MapReduceBase并实现Mapper接口. Mapper接口负责数据处理阶段.它采用形式为Mapper<K1,V1,K2,V2>的Jav

linux程序分析工具介绍(三)——sar

本文要介绍的sar,是linux下用来分析系统本身运行情况的非常有用的工具.我们知道,程序在操作系统上要运行,要关注的点不外乎内存,CPU和IO(包括磁盘IO和网络IO).我们的应用程序在操作系统中运行前,我们需要了解系统当前的内存,cpu和IO的使用状况,还需要明白我们的应用程序运行时自身所需要的内存,cpu和IO资源的情况.只有操作系统剩余的内存,cpu和IO资源能够满足应用程序所需要的,才能保证应用程序在操作系统中正常的运行.sar就是用来帮助我们了解操作系统当前内存,cpu和IO等资源的

C#程序分析

一.程序及问题 阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间精确到分钟(电脑:单核CPU 4.0G Hz,内存和硬盘等资源充足). 问题4:在多核电脑上如何提高这一程序的运行效率? using System; using System.Collections.Generic; using System.Text; namespace Find

FFmpeg源代码分析:结构体成员管理系统-AVOption

本文继续上篇文章<FFmpeg源代码分析:结构体成员管理系统-AVClass>中的内容,记录FFmpeg中和AVOption相关的源代码.AVOption用于在FFmpeg中描述结构体中的成员变量.一个AVOption可以包含名称,简短的帮助信息,取值等等. 上篇文章简单回顾 上篇文章中概括了AVClass,AVOption和目标结构体之间的关系.以AVFormatContext为例,可以表示为下图. 有关上篇文章的内容,这里不再重复.总体来说,上篇文章主要概括了AVClass,AVOptio