如何适配ESL应用平台到新的硬件板

简介: 本文介绍 如何适配ESL应用平台到新的硬件板

1. 目标

本文介绍如何基于CH6121 BLE SDK 1.3.0中的ESL设备应用示例快速完成ESL设备(电子价签)的功能移植,其中主要包括显示屏驱动、LED驱动的移植,电压采集功能的移植。

2. 显示屏驱动移植

ESL设备应用示例中,封装了显示屏驱动接口,方便用户对接各类显示屏驱动。用户需要添加显示屏类型、并将屏幕尺寸和刷图函数注册至显示屏硬件抽象层即可完成驱动移植。

下面以OPM021EG型号的显示屏为例,介绍如何完成显示屏驱动接口的移植 。

2.1. 驱动接口

开发者需要定义图片数据接收Buffer的大小,并将相关信息和图片显示函数注册至显示屏硬件抽象层,即可完成显示屏驱动对接。

OPM021EG驱动实现文件路径:
applications/bluetooth/esl/src/esl_function/OPM021EG.c

/* OPM021EG显示屏大小为 250 * 128, (250 * 128) / 8 = 4000 Bytes */
#define OED_OPM021EG_SIZE     4000

/* OPM021EG显示屏宽度为128 bits */
#define OED_OPM021EG_WIDTH    128

/* OPM021EG显示屏高度为250 bits */
#define OED_OPM021EG_HEIGHT   250

/* 根据屏幕尺寸定义图片数据接收Buffer,要求4字节对齐。
   图片数据通过ESL组件接收完成后将保存至Flash图片区域,
   在APP Task中将从Flash读出图片数据,存放至PICO_Orientation数组中
*/
unsigned int PICO_Orientation[(OED_OPM021EG_SIZE + 3) / 4] __noretention = {0};

/* 图片显示函数 */
static int OED_OPM021EG_epd_show_image(void)
{
    /* 将图片数据接收Buffer中的数据发送至显示屏 */
    ......
}

/* 显示屏驱动初始化,注册显示屏尺寸和类型信息、刷图函数至显示屏硬件抽象层。 */
void OED_OPM021EG_init(screen_t *env)
{
    ......
    /* 注册图片接收Buffer大小 */
    env->size   = OED_OPM021EG_SIZE;
    /* 注册显示屏宽度 */
    env->width  = OED_OPM021EG_WIDTH;
    /* 注册显示屏高度 */
    env->height = OED_OPM021EG_HEIGHT;

    ......
    /* 注册图片显示驱动函数 */
    env->epd_show_image = OED_OPM021EG_epd_show_image;
}

2.2. 型号添加

开发者需要在配置文件中添加宏定义以支持不同型号的显示屏。

显示屏配置头文件路径:
applications/bluetooth/esl/src/esl_function/user_epd_driver.h

/* define EPD model */
enum {
    SCREEN_MODEL_INVALID,                    // = 0

    ......
    /* 新增OPM021EG类型 */
    SCREEN_MODEL_OED_OPM021EG_BW122X250,
    .....

    __SCREEN_MODEL_MAX,
};

2.3. 驱动接口注册

开发者在显示屏驱动接口初始化时,将当前显示屏信息注册至显示屏硬件抽象层。

显示屏硬件抽象层文件路径:
applications/bluetooth/esl/src/esl_function/user_epd_driver.c

/* 显示屏硬件抽象层初始化 */
int user_epd_init(uint8_t model)
{
    ......
    switch (model) {
        ......
        case SCREEN_MODEL_OED_OPM021EG_BW122X250: {
            /* 型号为OPM021EG的显示屏的初始化,该函数需要将显示屏尺寸和类型信息、刷图函数注册到
               显示屏硬件抽象层。
            */
            OED_OPM021EG_init(&esl_user_var.screen_env);
            break;
        ......
    }
    return 0;
}

2.4. 驱动初始化

开发者在应用初始化时,需要设置当前使用的显示屏类型。

ESL应用初始化文件路径:
applications/bluetooth/esl/src/app_esl.c

/* ESL 应用初始化 */
int esl_application_init()
{
    ......

    /* 显示屏驱动初始化 */
    user_epd_init(SCREEN_MODEL_OED_OPM021EG_BW122X250);

    ......
    return 0;
}

3. LED移植

ESL设备应用示例中,实现了LED驱动程序,开发者只需根据产品板硬件设计配置不同的GPIO引脚,即可完成LED灯控功能。

LED头文件路径:
applications/bluetooth/esl/src/esl_function/rgb_led.h

/* 定义红色LED电平管脚 */
#define LED_PIN_RED        P18

/* 定义绿色LED电平管脚 */
#define LED_PIN_GREEN      P1

/* 定义蓝色LED电平管脚 */
#define LED_PIN_BLUE       P0

4. 电压采集移植

CH6121芯片支持内部电压采集,用户只需配置好ADC采集管脚,即可完成芯片工作电压的采集。

文件路径:
applications/bluetooth/esl/src/esl_function/user_batt.c

int get_batt_voltage(void)
{
    /* 配置ADC采集通道为P13管脚对应的通道号 */
    uint32_t ch_array[1] = {ADC_CH2N_P13};

    ......
    /* 配置P13管脚用途为ADC */
    drv_pinmux_config(P13, ADCC);
    
    ......
    return ret;
}

注意:

CH6121芯片支持内部电压采集的管脚与通道号对应关系见下表。

image.png

文章来源:芯片开放社区
文章链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=3768261406034563072

相关文章
|
开发框架 JavaScript 前端开发
HaaS200 硬件介绍
HaaS200是一款阿里云智能HaaS团队认证、高性能、多连接的物联网开发板。内嵌HaaS201核心模组,包含一个KM4内核的高性能MCU和一个KM0内核的低功耗MCU;自带512KB SRAM,4MB PSRAM和外置4MB FLASH;集成有双频Wi-Fi 2.4G/5G 和蓝牙5.0。HaaS200搭载全新的AliOS Things 3.3操作系统和HaaS轻应用开发框架,支持Python和JavaScript快速开发,免除编译烧录等的繁琐,轻松实现云端一体物联网开发,是IOT开发神器。
HaaS200 硬件介绍
|
2月前
|
Android开发 芯片 SoC
全志H713/H618方案:调焦电机(相励磁法步进电机)的驱动原理、适配方法
本文介绍了全志H713/H618方案中调焦电机(相励磁法步进电机)的驱动原理、适配方法,并通过DTS配置和驱动实现代码,详细说明了如何控制步进电机的正反转和步数,以及如何进行测试。
75 1
全志H713/H618方案:调焦电机(相励磁法步进电机)的驱动原理、适配方法
|
5月前
|
存储 小程序 中间件
单片机中MCU跑RTOS相比裸机的优势
单片机中MCU跑RTOS相比裸机的优势
59 1
|
5月前
|
编解码 芯片
嵌入式中常见的显示屏接口有哪些?
嵌入式中常见的显示屏接口有哪些?
122 0
|
5月前
|
存储 Web App开发 关系型数据库
嵌入式硬件中常见的100种硬件选型方式
嵌入式硬件中常见的100种硬件选型方式
104 0
|
API 开发者
HarmonyOS学习路之开发篇—设备管理(控制类小器件)
控制类小器件指的是设备上的LED灯和振动器。其中,LED灯主要用作指示(如充电状态)、闪烁功能(如三色灯)等;振动器主要用于闹钟、开关机振动、来电振动等场景。
|
Android开发 开发者
Android平台GB28181设备接入模块之球机/云台控制探究
好多开发者在做GB28181设备接入的时候,问云台控制是否可以处理(亦或拉取外部RTSP摄像头,通过命令中转的方式,控制摄像头),实际上云台控制命令相对来说还是比较好处理的。协议规范有明确说明,云台控制命令不需要发送应答命令,实现相对简单,和我们之前做的远程启动命令(TeleBoot)类似。
146 0
|
IDE 开发工具
LabVIEW LINX Toolkit控制Arduino设备(拓展篇—1)
在LabVIEW和单片机(Arduino)系列专栏中使用LabVIEW Interface for Arduino接口工具包实现和Arduino联控。本篇博文将拓展讲解另一款新的接口工具包实现对Arduino的控制,它就是LabVIEW LINX。 LabVIEW LINX Toolkit可支持驱动Raspberry Pi、BeagleBoard和Arduino开发板,包含数字、模拟、SPI、I2C、UART、PWM等驱动接口,非常适合创客开发实践。
西门子S7-1200硬件的组态,设备配置、网络组态
今天我们来学习西门子S7-1200硬件的组态。在S7-1200中当用户新建一个项目时,应当先进行硬件组态,硬件组态是编写项目程序的基础。在STEP7 Basic中,硬件组态遵循所见即所得的原则,PLC和HMI设备都能在相同的环境以相同的方式插入列项目中。
西门子S7-1200硬件的组态,设备配置、网络组态
|
传感器 JavaScript 前端开发
HaaS生态硬件积木库总纲
HaaS生态硬件积木集结库
HaaS生态硬件积木库总纲
下一篇
无影云桌面