RT_Thread应用开发

2019-07-19  本文已影响0人  Mr_Michael

一、Bootloader固件升级

RT-Thread ST固件更新过程

RT-Thread 通用 Bootloader 的软件框架

image

RT-Thread 通用 Bootloader 特点

1.固件升级过程

image

当系统需要升级固件时,Bootloader 将从 download 分区将固件搬运到 app 分区,主要功能流程如下所示:

  1. Bootloader 启动时检查 download 分区和 app 分区中的固件版本。
  2. 如果两个固件版本相同,则跳转到 app 分区,Bootloader 运行结束。
  3. 固件版本不同则将 download 分区中的固件搬运到 app 分区。
  4. 在搬运的过程中 Bootloader 可以对固件进行校验、解密、解压缩等操作。
  5. 搬运完毕后,删除 download 分区中存储的固件。
  6. 重启系统跳转到 app 分区中的固件运行,Bootloader 运行结束。

2.获取 Bootloader

Bootloader 在线获取地址

fal:Flash 抽象层

根据板级实际情况选择硬件配置和分区

image

3.工程设置分区表

/* partition table */
#define FAL_PART_TABLE                                                                                                     \
{                                                                                                                          \
    {FAL_PART_MAGIC_WROD, "download",        "onchip_flash_128k", 0 , (128*1024), 0}, \
    {FAL_PART_MAGIC_WROD, "app",        "onchip_flash_128k", (1*128*1024) , FLASH_SIZE_GRANULARITY_128K-(128*1024), 0}, \
}
//onchip_flash_128k代表首地址为地址0x08020000基础,偏移0, 长度为(128*1024),即128k

二、example程序使用

将示例程序添加到bsp/xxx/application文件夹下,工程文件夹路径下,并在SConscript文件中加入其文件,在编译时或生成工程时,就会将文件加入工程之中执行编译

通过FINSH_FUNCTION_EXPORT或MSH_CMD_EXPORT 宏定义,可以将函数加入到Finsh或MSH的命令之中

1.使用Ymodem协议传输文件到RT-Thread文件系统

1)使能Ymodem组件
2)添加tofile.c应用程序
3)修改文件默认保存路径
4)增加msh命令
5)使用Ymodem

三、设备和驱动

RT_Thread设备类型定义

enum rt_device_class_type
{
    RT_Device_Class_Char = 0,                           /**< character device */
    RT_Device_Class_Block,                              /**< block device */
    RT_Device_Class_NetIf,                              /**< net interface */
    RT_Device_Class_MTD,                                /**< memory device */
    RT_Device_Class_CAN,                                /**< CAN device */
    RT_Device_Class_RTC,                                /**< RTC device */
    RT_Device_Class_Sound,                              /**< Sound device */
    RT_Device_Class_Graphic,                            /**< Graphic device */
    RT_Device_Class_I2CBUS,                             /**< I2C bus device */
    RT_Device_Class_USBDevice,                          /**< USB slave device */
    RT_Device_Class_USBHost,                            /**< USB host bus */
    RT_Device_Class_SPIBUS,                             /**< SPI bus device */
    RT_Device_Class_SPIDevice,                          /**< SPI device */
    RT_Device_Class_SDIO,                               /**< SDIO bus device */
    RT_Device_Class_PM,                                 /**< PM pseudo device */
    RT_Device_Class_Pipe,                               /**< Pipe device */
    RT_Device_Class_Portal,                             /**< Portal device */
    RT_Device_Class_Timer,                              /**< Timer device */
    RT_Device_Class_Miscellaneous,                      /**< Miscellaneous device */
    RT_Device_Class_Sensor,                             /**< Sensor device */
    RT_Device_Class_Unknown                             /**< unknown device */
};

char *const device_type_str[] =
{
    "Character Device",
    "Block Device",
    "Network Interface",
    "MTD Device",
    "CAN Device",
    "RTC",
    "Sound Device",
    "Graphic Device",
    "I2C Bus",
    "USB Slave Device",
    "USB Host Bus",
    "SPI Bus",
    "SPI Device",
    "SDIO Bus",
    "PM Pseudo Device",
    "Pipe",
    "Portal Device",
    "Timer Device",
    "Miscellaneous Device",
    "Sensor Device",
    "Unknown"
};

1.Pin设备

应用程序通过 RT-Thread 提供的 PIN 设备管理接口来访问 GPIO,相关接口如下所示:

函数 描述
rt_pin_mode() 设置引脚模式
rt_pin_write() 设置引脚电平
rt_pin_read() 读取引脚电平
rt_pin_attach_irq() 绑定引脚中断回调函数
rt_pin_irq_enable() 使能引脚中断
rt_pin_detach_irq() 脱离引脚中断回调函数
1)获取引脚编号

2.ADC

3.UART

上一篇下一篇

猜你喜欢

热点阅读