本次以rgb24的oled屏为例;
最好用source insight打开工程;方便追踪代码;

1. uboot启动代码流程;
common/board_r.c下-> void board_init_r(gd_t *new_gd, ulong dest_addr);{//依次调用序列完成各种初始化for (i = 0; i < ARRAY_SIZE(init_sequence_r); i++)init_sequence_r[i] += gd->reloc_off;序列中调用的一些函数分析: misc_init_r 调用board/hisilicon/hi3516av300/下的int misc_init_r(void);-> is_auto_update(); //检查是否自动更新,在里面处理并返回是否自动更新;-> do_auto_update(); //自动更新-> 调用 product/hiupdate/auto_update_adaptation.c(有可能是auto_update.c)中 do_auto_update(void);主要完成mmc/usb检测及读取升级文件在board\hisilicon\hi3516av300\hi3516av300.c中int board_mmc_init(bd_t *bis);{-> himci_add_port-> himci_probe //探测-> mmc_init();//初始化mmc-> print_mmcinfo();//打印mmc信息}        }
2. 开机logo修改源码流程
参考文档:sdk下“开机画面使用指南”;
procduce/hiosd/下a) dec目录 完成jpeg图片的解码处理等;  jpegf_entry.c中可修改各种解码地址;b) vo目录完成屏的vo操作 包括驱动初始化屏幕等;屏需要用户时序需要修改 vo_drv.c中时序等;c) mipi_tx 等开机logo实现流程:1) 管脚复用2) load_jpeg(); //修改各种地址3) jpeg_decode(0);//解码图片4) start_vo();5) 屏初始化6) start_videolayer(xxx);7) //start_gx(xxx); 没用到
4. 具体实现

1) 很多地方和linux内核相差不大;做linux驱动时需要管脚复用这里也需要;

//g_reg_iocfg2_base不需要映射;uboot没有虚拟地址这一概念,直接调用writel即可;
#define g_reg_iocfg2_base       0x112F0000
writel(0x462, g_reg_iocfg2_base + 0x0034); //复用MCLK
....

2)load_jpeg()中;

get_vo_buf_addr(); //vobuf地址是解码jpeg图片后输出RGB图像的存放地址;
get_emar_buf_addr();//jpeg_emar_buf是解码JPEG图片过程中使用到的buffer地址;
need_2_emar_buf();
get_jpeg_size();//是JPEG图片原始码流的大小; 注:一定要和logo实际大小一致,否则图像不正常;
get_jpeg_stream_addr();//jpeg_addr是用于存放JPEG图片原始码流的地址;sprintf(cmd_buf, "nand read %lx %x %x", g_hilogo, LOGO_FLASH_ST, LOGO_LEN);
run_command(cmd_buf, 0);//运行脚本补充:上述地址可参考文档:jpeg_addr 0x90000000jpeg_size 实际大小;电脑右键->属性可看字节->转16进制;jpeg_emar_buf 0x96000000vobuf 0xa0000000

3)jpeg_decode(0);

参数: 0: YVU SEMI-PLANAR 420, 1: ARGB1555, 2:ARGB8888
作用:解码图片;

4)int start_vo(unsigned int dev, unsigned int type, unsigned int sync);

参数1:设备号,一般是0;
参数2:如下
/* VO video output interface type */
#define VO_INTF_CVBS        (0x01L<<0)
#define VO_INTF_YPBPR       (0x01L<<1)
#define VO_INTF_VGA         (0x01L<<2)
#define VO_INTF_BT656       (0x01L<<3)
#define VO_INTF_BT1120      (0x01L<<4)
#define VO_INTF_HDMI        (0x01L<<5)
#define VO_INTF_LCD         (0x01L<<6)
#define VO_INTF_BT656_H     (0x01L<<7)
#define VO_INTF_BT656_L     (0x01L<<8)
#define VO_INTF_LCD_6BIT    (0x01L<<9)
#define VO_INTF_LCD_8BIT    (0x01L<<10)
#define VO_INTF_LCD_16BIT   (0x01L<<11)
#define VO_INTF_LCD_18BIT   (0x01L<<12)
#define VO_INTF_LCD_24BIT   (0x01L<<13)
#define VO_INTF_MIPI        (0x01L<<14)
#define VO_INTF_MIPI_SLAVE  (0x01L<<15)参数3:
typedef enum {
VO_OUTPUT_PAL = 0,               /* PAL standard*/
VO_OUTPUT_NTSC,                  /* NTSC standard */
VO_OUTPUT_1080P24,               /* 1920 x 1080 at 24 Hz. */
VO_OUTPUT_1080P25,               /* 1920 x 1080 at 25 Hz. */
VO_OUTPUT_1080P30,               /* 1920 x 1080 at 30 Hz. */
....
VO_OUTPUT_USER,                  /* User timing. */
VO_OUTPUT_BUTT

} vo_intf_sync;

5)初始化屏幕

 调用屏幕驱动即可;需要将驱动移植过来;

6)int start_videolayer(unsigned int layer, unsigned long addr, unsigned int strd, hi_vo_rect layer_rect);

参数1:视频层号
参数2:解码后的图像地址;
参数3:行宽;
参数4:显示位置和大小(x,y,w,h)

7)补充其他
a.

用户时序自行修改 product\hiosd\vo\hi3516cv500\vou_drv.c中的:
1) vo_user_intfsync_info g_user_intfsync_info
2) hal_disp_syncinfo g_sync_timing[VO_OUTPUT_BUTT] = {xxx};
3) hal_dev_config g_hal_dev_cfg[VO_DEV_MAX_NUM] = {};

b. 烧入logo进入分区

c. 图像花屏

 检查图片大小是否正确;大部分是这个原因;

d. logo反了,改图片即可;

海思3516av300开机logo相关推荐

  1. 海思篇之开机logo的加载(Hi3531a命令版)

    一,海思logo加载的实现流程 海思的加载主要是在uboot启动后(kernel起来之前),输入相关的命令来实现的,具体要用到什么命令,以及命令的顺序,则可以参考海思的开发文档<HiMPP 开机 ...

  2. 海思篇之开机logo的加载(Hi3531a代码版)

    在看这篇博客之前,建议大家先参考前一篇博客海思篇之开机logo的加载(Hi3531a命令版),在了解了logo加载的流程之后,接下来的代码篇才会更容易理解.我用的开发板是Hi3531a,不同的版本可能 ...

  3. 海思开机Logo的使用

    前言 文本记录海思hi3531d在uboot的命令行,以及启动函数中,加载logo的过程 参考资料:HiMPP 开机画面使用指南.pdf 图片的要求 要求是jpeg.jpg格式,不然无法解码,如果你自 ...

  4. 海思开发板设置开机自启动方法

    通过对ubuntu系统的开机自启动的更改,发现可以在海思平台下也进行开机自启动的更改,而且实际测试完全有效,但是尽量不要将一些耗费时间的应用进行开机启动. 设置步骤: 1.在虚拟机下将海思下的可执行文 ...

  5. android 开机动画尺寸,Android开机Logo动画制作

    开机Logo制作 1.准备Logo图片 准备一张符合尺寸要求(例如:1280x720)的图片,最好是png或jgp. 2.用Hitool工具制作镜像文件 海思芯片使用的是Hitool工具,打开Hito ...

  6. 4K 海思 联咏 芯片_强悍芯片,重装来袭-海美迪H7 Plus旗舰4K电视盒子体验

    目前大部分家庭都有自己的无线网络装置,使用网络电视盒子观看电视已是常态,随着智能科技不断进步,电视盒子不仅资源丰富,更适合观看大片.追剧.投屏等便利,加上现在4K高清.HDR.DTS影音技术的提升,电 ...

  7. 东芝移动硬盘拆解图_华为Mate40系列新技术曝光:海思闪存亮相,性能超三星东芝...

    阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以继续免费收到最新文章了.每天都有分享.完全是免费订阅,请放心关注.                        ...

  8. 第七季4:网络telnet调试、海思proc文件系统调试接口

    以下内容源于朱有鹏课程, 如有侵权,请告知删除. 一.添加网络添加telnet调试 1.为什么添加telnet调试 (1)inux系统的用户界面就是commandline,本质上由busybox提供. ...

  9. 海思hi3516dv300 配置uart3

    目前uart3发送和接收正常. 通过Hi3516DV300 专业型 Smart IP Camera SoC 用户指南.pdf文档得到hi3516dv300共有5个串口, 板子卖家给的资料中串口没有标注 ...

最新文章

  1. Redis的数据模型
  2. mycheckpoint
  3. 数据科学家是个性感的工作?我信你个鬼!
  4. java 获得站点地址_JavaWeb项目里面的路径获取方法总结
  5. Gym 101128A :Promotions (Southwestern Europe Regional Contest )
  6. 30. 包含min函数的栈
  7. 分布式事务中间件Seata的安装
  8. 如何查看Python源代码
  9. Fluent UDF中调用Matlab函数(以误差函数erf为例)
  10. docker设置系统开机自动启动,docker容器随着docker服务启动自动运行
  11. 迅雷 android下载地址 http,Android HTTP边下边播
  12. duilib制作窗体动画效果
  13. 央企招聘:中国航空工业集团直属公司2023秋季招聘
  14. UML(系统分析与设计核心总结)+期末考试例题分析
  15. 在DW中制作网页中的表格
  16. 将Sublime Text 设置成中文版
  17. AHB与VPB的区别
  18. 燕山大学教务系统官网计算机学院,燕山大学教务系统登录入口:https://jwc.ysu.edu.cn/...
  19. python在人工智能领域的应用论文_试析人工智能背景下的Python教学
  20. 洛谷 P5707 上学迟到

热门文章

  1. Linux运维提升之路
  2. [Matlab]双线性变换法设计数字低通滤波器
  3. 小卫星制造行业深入研究
  4. 人口生育老龄化政策数据表(1971-2023年)
  5. 无法打开python27_d.lib(python36_d.lib)的问题
  6. Atlas:超精简WIN10系统
  7. Jmeter-获取登录Session(cookie管理器)
  8. 科全可拓展免费进销存系统
  9. 一个女孩的IT创业经历,想创业的男人女人必看!
  10. tp6 关于微信小程序的一个转账demo