技术笔记20230718 rBoot学习3

技术笔记20230718 rBoot学习3

  继续昨天的学习。

配置

  • count是可用的rom数量(只能比MAX_ROMS少)。
  • unused[2]是填充,为了使uint32_t类型的成员变量rom四字节对齐。
  • roms是保存rom在Flash上的地址的数组。默认生成的配置将包含两个地址:0x000020000x00082000
  • chksum是一个字节的校验。如果使能了校验功能(默认为不使能),它的值应该是配置结构体中的每个字节与0xef的异或和。显然,计算校验和时不包括chksum本身。

默认配置

  如果默认的配置扇区不存在,或者仅有的配置被损坏,那么将在boot阶段创建一个默认的配置扇区,此默认rom将被设置为0号rom。如果我们需要实现一套自定义的配置,而不是默认配置时,我们可以在rboot.h头文件中修改。更多相关信息在rboot.h的注释与源码中记录。

GPIO引导模式

  如果在编译rBoot时在rBoot.h中定义了BOOT_GPIO_ENABLED或者在Makefile中设置了RBOOT_GPIO_ENABLED,那么将启用GPIO引导功能。然后可以通过将rboot_config的成员变量mode设置为MODE_GPIO_ROM来启用该功能。我们还需要在配置中设置gpio_rom来指定在进入GPIO引导模式时要启动哪个rom。
  如果引导检测GPIO在启动时读取到高电平,那么rBoot将根据当前状态启动当前选择的正常或临时rom。相反,如果该GPIO被拉低,那么配置选项gpio_rom中指定的rom将被启动。
  默认的GPIO为GPIO16,我们可以根据实际情况在Makefile(RBOOT_GPIO_NUMBER)或rboot.hBOOT_GPIO_NUM)中修改。如果使用GPIO16以外的IO口,就需要在读取引脚电平之前使能内部上拉电阻,在读取结束后立刻禁用该IO口。For pins that default on reset to configuration other than GPIO input, the pin mode is changed to input when reading but changed back before rboot continues.不太懂这一句是什么意思。大概是GPIO引导引脚存在复用时,应该在进入rBoot前将GPIO设置为输入模式。
  在进入GPIO引导模式后,配置中的current_rom变量会被更新。因此,GPIO引导的rom应该在适当位置再次更改此变量。

GPIO引导跳过模式

  如果在编译rBoot时,rBoot.h中定义了BOOT_SKIP_ENABLED或者在Makefile中设置了RBOOT_GPIO_SKIP_ENABLED,那么GPIO可以用来在引导时跳到下一个rom。然后将配置rboot_config中的成员变量mode的值设置为MODE_GPIO_SKIP来启用该功能。这就意味着我们不需要有一个专用的GPIO引导rom。如果我们配置一个专用的GPIO引导rom,那更能体现我们的技术力,但是可能引发操作问题,例如WiFi不工作或在程序引导阶段崩溃。这样rBoot就无法检测到且无法自动切换。在这种情况下,只能重新启动设备,同时拉低GPIO迫使rBoot跳过这个rom并尝试运行下一个rom。在简单的双rom配置中,这只是简单地切换rom启动。  RBOOT_GPIO_SKIP_ENABLEDRBOOT_GPIO_ENABLED不能同时使用。BOOT_GPIO_NUM用于选择GPIO引脚。

你可能感兴趣的:(技术笔记,笔记,学习)