展讯平台启动流程

启动流程
1、 Stage1 
start.S代码结构 u-boot的stage1代码通常放在start.S文件中,用汇编语言,主要实现功能如下: 
(1) 定义入口: 该工作通过修改连接器脚本来完成。 
(2)设置异常向量(Exception Vector)。 
(3)设置CPU的速度、时钟频率及终端控制寄存器。 
(4)初始化内存控制器。 
(5)将ROM中的程序复制到RAM中。 
(6)初始化堆栈。 
(7)转到RAM中执行,该工作可使用指令ldr pc来完成。 
2、Stage2 
C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作: 
(1)调用一系列的初始化函数。 
(2)初始化Flash设备。 
(3)初始化系统内存分配函数。 
(4)如果目标系统拥有NAND设备,则初始化NAND设备。 
(5)如果目标系统有显示设备,则初始化该类设备。 //LCM 
(6)初始化相关网络设备,填写IP、MAC地址等。 

(7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。


u-boot\arch\arm\cpu\armv7\start.S
.globl _start
_start: b reset
… …
jump_2_ram:
… …
_board_init_r_ofs:
.word board_init_r - _start    //调用 uboot/arch/arm/lib/ board.c 是C 语言开始的函数也是整个启动代码中C语言的主函数,进入Stage2




u-boot\arch\arm\lib\board.c
一、初始化硬件
board_init_r ()stdio_init ()(stdio.c) drv_lcd_init ()(lcd.c) lcd_init ()(lcd.c) 
 lcd_ctrl_init ()(sprdfb_main.c)  sprdfb_probe()(sprdfb_main.c)


sprdfb_dispc_ctrl (sprdfb_dispc.c)


sprdfb_panel_probe()(sprdfb_panel.c) adapt_panel_from_readid (保存读到的LCD ID
值) panel_mount
sprdfb_mipi_ctrl(sprdfb_mipi.c)


二、显示开机logo
board_init_rdo_cboot(cmd_cboot.c) normal_mode(normal_mode.c)
 vlx_nand_boot(normal_emc_mode.c) lcd_display_logo(normal_mode.c)
lcd_display_bitmap ()(sprdfb_main.c) 
 









SC9620芯片内部集成了Lcd显示相关的控制器:LCDC和DispC, 
其中LCDC仅支持MCU接口类型(DBI),
而DispC支持DBI和DPI接口类型;
DBI接口又细分为DBI-A(Moto 6800)和DBI-B(Intel 8080),
DPI接口又细分为DPI和eDPI(增强型DPI,支持DCS);


Dispc 负责获取显示数据,通过DPI、DBI输出。
MIPI DSI host controller,负责将从DispC eDPI接口送过来的数据和控制信号,转换控制命令和 
MIPI D-PHY controller将实现双向通用通道的物理层,提供4个数据通道(每个通道最大速率1Gbps)和1个时钟通道与LCM的通信。 
  
显示模块驱动代码
sprdfb_main.c  ----  与fbmem.c构成Framebuffer驱动
sprdfb_panel.c  ----  Ctrl到I/F驱动和panel驱动的桥接器
sprdfb_mipi.c   ----  Mipi接口驱动及为其提供操作接口的DSI驱动
sprdfb_dispc.c  -----   DispC驱动
dsi_1_10a      ----  Mipi D-PHY驱动及DSI协议层



dev->ctrl->early_init       sprdfb_dispc_early_init
dev->panel->ops->panel_readid     otm8019a_readid


struct info_mipi {
uint16_t work_mode;               //image数据传输模式(video mode, command mode)
uint16_t video_bus_width;              //像素位宽(16,18,24)
uint32_t lan_number;                  //D-PHY数据通道个数(1~4)
uint32_t phy_feq;                      //D-PHY频率(单位HZ)
uint16_t h_sync_pol;                   //行同步信号极性
uint16_t v_sync_pol;                   //帧同步信号极性
uint16_t de_pol;                       //数据使能信号极性
uint16_t te_pol;                       //TE信号极性(仅CMD mode)
uint16_t color_mode_pol;               //颜色模式信号极性
uint16_t shut_down_pol;                //关闭DSI host的信号极性
struct timing_rgb *timing;                //DPI时序
struct ops_mipi *ops;
};




MIPI接口的屏支持以下两种工作模式:
DSI(VideoMode)视频模式.
这种工作模式与传统RGB接口相似,主机需要持续刷新显示器。由于不使用专用的数据信号传输同步信息,控制信号和RGB数据是以报文的形式通过MIPI总线传输的。因为主机需要定期刷新显示器,显示器就不需要帧缓冲器。带RAM的屏一般比不带RAM的屏要贵一些,对于一些控制成本的方案,选择屏供应商需要格外关注这个!
  DCS(Command mode)命令模式
MIPI总线控制器使用显示命令报文来向显示器发送像素数据流。显示器应该有一个全帧长的帧缓冲器来存储所有的像素数据。一旦数据被放在显示器的帧缓冲器中,定时控制器就从帧缓冲器中取出数据,并自动把它们显示在屏幕上。MIPI总线控制器不需要定期刷新显示器。
两种模式的优缺点
     在成本和功耗方面,每个工作模式都有优点和缺点。视频模式显示架构无须帧缓冲器。然而,主机定期以高速模式发送DSI视频报文却消耗了大量的平均能量。
     在理想情况,当显示内容不改变时(或不经常改变时),显示系统的中央处理器就应该切换到低功耗模式,而处理器和显示器之间的链路会在需要的时候激活。由于主机定期刷新的需要,部分中央处理器和存储器接口也需要保持激活状态,这可以使系统不会达到最好的功率预算。
     另一方面,命令模式显示架构允许显示器直接对整个帧缓冲器进行自刷新。然而,在显示器中集成全帧长帧缓冲器总是需要成本的,特别是今天的大多数用户所需求的高分辨率显示器。这就要求接口芯片有更大的管芯尺寸。显示器制造商也不得不为每种显示分辨率提供具有特定容量帧缓冲器的显示控制器。
  对于视频模式和命令模式显示架构,通常都需要对显示控制器的寄存器编程来设置相应的显示分辨率、外观比率和工作模式。MIPI并不定义任何标准协议来访问这些内部寄存器,因此,不同的显示器制造商可以定制自己专用的命令集。
 

在展讯平台上点亮MIPI接口屏正常显示需要满足以下几条:
1:确认Lcd的驱动文件被正常编译编译进去,并且lcd 和board name里面注册一质, 
2. 必须保证数据能够正确的传输到屏上,,一般在读取ic 的id和初始化设置指令时,都是在mipi的低速(lp)模式下,在初始化完成后,需要切换到高速(hp)状态下,才能正常的显示!
3. 必须保证ic设置的proch和timing,通道,速率正确,屏才可以正常的显示,一般显示出现花屏,显示偏移等问题,通常情况下,就是因为你设置的某些参数不正确,导致显示异常!
4:仔细检查上电同时测量,对于mipi和需要下code的RGB panel需要RST高低高操作,这样code才生效。注意一般sleep out(0x11)和display on(0x29)之间需要mdelay(120)左右,貌似这个对于大部分panel是必须的。如果这部分延时不够,会导致屏在进出睡眠或者显示过程中出现白屏,无法正常的显示!
5:最后还要确认是否有framebuffer输出,要是改动了display这块的clk很有可能没有buffer输出的,可以通过cat
/dev/graphyics/fb0查看有没有输出字符。
注:一般wvga以及更高分辨率的陪你过通常采用2 line甚至更高的通道数,hvga及以下分辨率的屏则通常采用单通道的mipi接口

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值