如何适配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

相关文章
|
26天前
|
移动开发 JavaScript 前端开发
前端组件库——Wot Design Uni知识点大全(一)
教程来源 https://zlpow.cn Wot Design Uni 是基于 Vue3 + TypeScript 的开源 uni-app UI 组件库,提供 70+ 高质量移动端组件,支持微信/支付宝小程序、H5、App 等多端兼容,内置暗黑模式、国际化(15+语言)与 CSS 变量主题定制,大幅提升跨平台开发效率。
|
10月前
|
人工智能 算法 调度
端侧宠物识别+拍摄控制智能化:解决设备识别频次识别率双低问题
随着宠物成为家庭重要成员,其影像创作需求激增。传统相机“人脸优先”逻辑难以应对宠物拍摄的复杂场景,如毛发模糊、动态多变、光照反差大等。本文基于端侧AI与影像工程经验,系统梳理宠物识别驱动的对焦曝光重构技术,结合算法与产业实践,构建从检测到参数调度的完整解决方案,推动拍摄技术向“宠物优先”转型。
343 0
|
9月前
|
域名解析 运维 监控
阿里云轻量服务器的系统镜像和应用镜像的区别
轻量应用服务器是阿里云推出的易用型云服务器,支持一键部署、域名解析、安全管理和运维监控。本文介绍其系统镜像与应用镜像的区别及选择建议,助您根据业务需求和技术能力快速决策,实现高效部署。
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
14684 81
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
算法 应用服务中间件 Shell
搭建高可用负载均衡器: haproxy+keepalived
企业业务量比较小的时候,单台服务器就可以满足业务需要了。但是随着业务发展,单服务器的问题就凸显出来了,如何透明的扩展服务器和带宽,增加服务器吞吐量呢?负载均衡器可以解决以上问题。
10501 47
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之读写分离是否有延时时间
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
开发框架 前端开发 JavaScript
【Uniapp 专栏】Uniapp 中的动画效果实现与特性
【5月更文挑战第13天】Uniapp是一款跨平台开发框架,提供丰富的动画效果以提升用户体验和应用吸引力。基于CSS和JavaScript动画,支持转场、元素等多种动画类型,确保跨平台一致性并优化性能。通过CSS属性或JavaScript库实现动画,结合页面布局和手势操作,创造沉浸式交互。通过调试和优化,开发者可打造惊艳效果,适应未来技术发展,提升应用竞争力。
1369 1
【Uniapp 专栏】Uniapp 中的动画效果实现与特性
|
Linux Docker 容器
Linux系统安装微信和企微(debian)
Linux系统安装微信和企微(debian)
4392 0
|
JavaScript 前端开发 小程序
uniapp中nvue页面如何全屏,map组件如何全屏?
uniapp中nvue页面如何全屏,map组件如何全屏?
1347 3

热门文章

最新文章