1.1K Star 6.1K Fork 4.9K

OpenHarmony / docs

 / 详情

能否提供屏幕外设驱动开发教程

已完成
任务
创建于  
2020-09-19 10:13

该问题是怎么引起的?

适配st7789芯片的屏幕不知道该怎么做

重现步骤

报错信息

评论 (14)

Laowang-BearPi 创建了任务
Laowang-BearPi 关联仓库设置为OpenHarmony/docs
展开全部操作日志

是在三方芯片上开发么?

你好,目前这款屏没有开源,开源版本不支持,你是想自己开发这款屏的驱动吗?

你好,目前这款屏没有开源,开源版本不支持,你是想自己开发这款屏的驱动吗?

@bean 我想在3516上适配ST7789这款屏幕,自己开发驱动,但是没找到能参考的文档和类似的驱动

@bean 我想在3516上适配ST7789这款屏幕,自己开发驱动,但是没找到能参考的文档和类似的驱动

@Laowang-BearPi 当前LCD驱动开发这块配置比较多,后面会简化LCD驱动开发,并开放出来,如果现在开发,需要配置芯片平台显示时序,pin脚复用关系

NEEN 添加了
 
doc-feature
标签
NEEN 负责人设置为zianed

@Laowang-BearPi 当前LCD驱动开发这块配置比较多,后面会简化LCD驱动开发,并开放出来,如果现在开发,需要配置芯片平台显示时序,pin脚复用关系

@bean 后面开放的时间点是什么时候,如果现在开发能否提供下简单指导手册,或者如果已经有了ST7789这个芯片的驱动或其他同类芯片的驱动能否提供参考下,非常希望能参与这些外设BSP开发贡献,但目前的情况确实无从下手

@bean 后面开放的时间点是什么时候,如果现在开发能否提供下简单指导手册,或者如果已经有了ST7789这个芯片的驱动或其他同类芯片的驱动能否提供参考下,非常希望能参与这些外设BSP开发贡献,但目前的情况确实无从下手

@Laowang-BearPi 你是什么开发环境?是hi3516dv300的demo板(海思原生demo板),还是开源板子(润和EMMC开发板),或者是第三方的芯片板子

@Laowang-BearPi 你是什么开发环境?是hi3516dv300的demo板(海思原生demo板),还是开源板子(润和EMMC开发板),或者是第三方的芯片板子

@bean hi3516dv300的demo板(海思原生demo板)

@bean hi3516dv300的demo板(海思原生demo板)

@Laowang-BearPi 那估计你没法开发,开源板只支持EMMC的,hi3516dv300的demo板是spi nor,你确认下是否可以跑开源版本?

@Laowang-BearPi 那估计你没法开发,开源板只支持EMMC的,hi3516dv300的demo板是spi nor,你确认下是否可以跑开源版本?

@bean spi nor 我试过了可以跑起来,现在就是没有外设的驱动。

@bean spi nor 我试过了可以跑起来,现在就是没有外设的驱动。

@Laowang-BearPi
这样开发试下:
1.创建/dev/lcd节点,实现ioctl功能:
#define LCD_DEV_PATH "/dev/lcd"
#define IOC_TYPE_LCD 'L'
#define LCDIOGET_PANEL_INFO _IOR(IOC_TYPE_LCD, 90, PanelInfo)
typedef struct {
uint32_t width;
uint32_t height;
uint32_t hbp;
uint32_t hfp;
uint32_t hsw;
uint32_t vbp;
uint32_t vfp;
uint32_t vsw;
uint32_t intfType;
uint32_t intfSync;
uint32_t frameRate;
IntfSyncInfo syncInfo;
} PanelInfo;
static const PanelInfo g_panelInfo = {
.width = 240,
.height = 320,
.intfType = VO_INTF_LCD_6BIT,
.intfSync = OUTPUT_240X320_50,
.frameRate = 50,
};
把g_panelInfo拷贝给用户态:
static int32_t IoctlGetPanelInfo(uint64_t arg)
{
PanelInfo *panelInfo = (PanelInfo *)(uintptr_t)arg;

if (panelInfo == NULL) {
    HDF_LOGE("%s: param is null", __func__);
    return HDF_ERR_INVALID_PARAM;
}

if (LOS_ArchCopyToUser(panelInfo, &g_panelInfo, sizeof(g_panelInfo)) != 0) {
    HDF_LOGE("%s: copy panelInfo failed", __func__);
    return HDF_FAILURE;
}
return HDF_SUCCESS;

}

static int32_t LcdIoctl(FAR struct file *filep, int32_t cmd, unsigned long arg)
{
int32_t ret;
if (filep == NULL) {
HDF_LOGE("%s: param is null", func);
return HDF_ERR_INVALID_PARAM;
}

switch (cmd) {
    case LCDIOGET_PANEL_INFO:
        ret = IoctlGetPanelInfo(arg);
        break;
    default:
        ret = HDF_ERR_NOT_SUPPORT;
        HDF_LOGE("%s: cmd unknown, cmd = 0x%x", __func__, cmd);
        break;
}
return ret;

}
2.在驱动的初始化函数中,使用spi接口下st7789的初始化code;
3.设置lcd pin脚复用为LCD:
static int32_t Lcd6BitMuxInit(void)
{
g_regIoCfgBase = (void*)ioremap_nocache(0x112F0000, 0x10000);
if (g_regIoCfgBase == NULL) {
return HDF_FAILURE;
}
SYS_WRITEL(g_regIoCfgBase + 0x0068, 0x4f4);
SYS_WRITEL(g_regIoCfgBase + 0x0084, 0x454);
SYS_WRITEL(g_regIoCfgBase + 0x007c, 0x474);
SYS_WRITEL(g_regIoCfgBase + 0x0088, 0x674);
SYS_WRITEL(g_regIoCfgBase + 0x0080, 0x474);
SYS_WRITEL(g_regIoCfgBase + 0x0074, 0x474);
SYS_WRITEL(g_regIoCfgBase + 0x0078, 0x474);
SYS_WRITEL(g_regIoCfgBase + 0x006C, 0x474);
SYS_WRITEL(g_regIoCfgBase + 0x0070, 0x474);
SYS_WRITEL(g_regIoCfgBase + 0x0064, 0x674);
return HDF_SUCCESS;
}

#define VO_INTF_LCD_6BIT (0x01L << 9)

#define OUTPUT_240X320_50 0

NEEN 任务状态待办的 修改为进行中

@Laowang-BearPi 问题是否已经解决?感谢反馈 :heart:

NEEN 添加了
 
feature
标签

驱动是不是只需要实现ioctl功能就可以了吗, 图形子系统是最终通过什么api去操作屏幕的

开发者您好,驱动开发指南已经更新,欢迎查阅最新文档,如有问题请提交Issue,非常感谢~

NEEN 任务状态进行中 修改为已完成

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(4)
其他
1
https://gitee.com/openharmony/docs.git
git@gitee.com:openharmony/docs.git
openharmony
docs
docs

搜索帮助