100ask_imx6ull开发板绝对是最2的IMX6ULL开发板!
为什么这么说呢?
因为它有别家的:
2倍的裸机文档!
2倍的裸机实验!
却是2分之1的价格!
自从去年我们发布了后,
开启了一个新模式:
0利润开发板吸引客户,
入门视频全部免费服务大众,
独家视频才收费。
硬件质量久经考验,即使是最专业的硬件工程师,也认可我们的设计和用料;
之前,资料缺乏是唯一槽点,
但是,
从4月20号,这一切都改变了!
600页裸机文档已经发布,
近30板上、板外模块,
每一章节都是韦老师修改,保证质量;
来,看看我们的文档,
就说LCD吧,
可能很多人都知道:HSYNC是行同步信息,VSYNC是列同步信号。
同步?行?列?
什么鬼东西嘛,请说些小白能听懂的话。
我们是善于讲课的老师,我们这样教你:
跟着韦老师,妈妈再也不用担心我的嵌入式学习了!
2倍的裸机文档/实验:
LED、RAM重定位、时钟、UART、GPIO按键、UND/SWI异常、
GPT定时器、EPIT定时器、EMMC卡、
TF卡、LCD、电容屏、
I2C、SPI、红外遥控器、DHT11温湿度、DS18B20温度模块、SR501人体红外模块、
SR04超声波、步进电机、OLED显示屏、
SPI DAC、AT24C02、GPS、
光敏,ADC,CAN、485。
2分之1的价格:标配369起(转发朋友圈),我们不挣硬件钱,所以当然0利润。
下面分享100ASK_IMX6ULL裸机文档第15章LCD编程之100ASK_IMX6ULL硬件原理
内容包括
1.1 LCD硬件工作原理简介
1.2 RGB接口的LCD硬件连接信号
1.3 TFT材质液晶屏接口简介(7寸1024600TN-RGB)
1.3.1 LCD关键特性
1.3.2 行时序
1.3.3 列时序
1.3.4 DE模式
1.3.5 RGB数据的存放形式
下面分别罗列。
假设上图是一个LCD屏幕,屏幕中一个一个密密麻麻的黑点称之为像素点,每一行有若干个点,试想下有一个电子枪,电子枪位于某一个像素点的背后,然后向这个像素发射红,绿,蓝三种原色,这三种颜色按不同的比例组合成任意一种颜色。电子枪在像素点的背后,一边移动一边发出各种颜色的光,电子枪从左往右移动,到右边边缘之后就跳到下一行的行首,继续从左往右移动,如此往复,一直移动到屏幕右下角的像素点,最后就跳回原点。
问题1:电子枪如何移动?
答: 有一条像素时钟信号线(DCLK),连接屏幕,每来一个像素时钟信号(DCLK),电子枪就移动一个像素。
问题2:电子枪打出的颜色该如何确定?
答:有三组红,绿,蓝信号线(RGB),连接屏幕,由这三组信号线(RGB)传递颜色
问题3:电子枪移动到LCD屏幕右边边缘时,如何得知需要跳到下一行的行首?
答:有一条水平同步信号线(HSYNC),连接屏幕,当接收到水平同步信号(HSYNC),电子枪就跳到下一行的最左边
问题4:电子枪如何得知需要跳到原点?
答:有一条垂直同步信号线(VSYNC),连接屏幕,当接收到垂直同步信号线(VSYNC),电子枪就由屏幕右下脚跳到左上角(原点)
问题5:电子枪如何得知三组信号线(RGB)确定的颜色就是它是需要的呢?
答:有一条RGB数据使能信号线(DE),连接屏幕,当接收到数据使能信号线(DE),电子枪就知道这时由这三组信号线(RGB)确定的颜色是有效的,可以发射到该像素点。
下图是开发板,LCD控制器,LCD屏幕的框图
之前提到的像素时钟(DCLK), 三组红,绿,蓝信号线(RGB),水平同步信号线(HSYNC),垂直同步信号线(VSYNC),RGB数据使能信号线(DE)都是从LCD控制器发出的,只要开发板支持LCD显示,它肯定就会有一个LCD控制器。
上图是RGB数据来源框图,内存中划出一部分区域,这块区域被称为Framebuffer。在Framebuffer里面我们会构造好每一个颜色所对应的像素。Framebuffer中的值会被LCD控制器读出来,通过RGB三组线传给电子枪,电子枪再把它转换成红绿蓝三种颜色打到屏幕上。在屏幕上的每一个像素,在Frambuffer里面都有一个对应存储空间,里面存有屏幕上对应像素的颜色。
LCD控制器会周而复始的从Framebuffer中取出一个个像素的颜色值,发给电子枪,同时需要和DCLK,VSYNC,HSYNC,DE这些信号配合好。
本次实验编程的屏幕属于RGB接口的显示屏,RGB接口的显示屏至少具备以下信号:
① 像素时钟信号(DCLK)
用于同步LCD上的DE,VS,HS,RGB信号线。
② RGB数据信号(R[0:7] ,G[0:7],B[0:7])
三组信号线组成,分别代表R(红色),G(绿色),B(蓝色),这三组信号中的每一组都会有8根信号,三组共同组成24根线来控制颜色数据。
有些LCD只需要16位颜色(RGB565),可以只使用8条红色数据线中的高5位,其余3位悬空;只使用8条绿色数据线中的高6位,其余2位悬空;只使用8条蓝色数据线中的高5位,其余3位悬空。
③ RGB数据使能信号(DE)
RGB接口的 LCD 有两种驱动模式:DE 模式和 HV 模式。
在HV模式下,需要用到HS与VS来控制刷新。比如对于分辨率为1024x600RGB的LCD,LCD控制器发出HS信号后,就会发出1024个DCLK,在每个DCLK上传输像素数据;当发出600个HS信号后,就会发出一个VS信号。
在DE模式下,需要用到DE信号来控制刷新,比如对于分辨率为1024x600RGB的LCD,LCD控制器发出DE信号后,就要发出1024个DCLK,在每个DCLK上传输像素数据;当发出600个DE信号,刷新完一帧数据后,又从第1行开始扫描。
编写LCD程序时,一般都会兼容两种模式,所以程序中会设置这3个信号:数据使能信号(DE),垂直同步信号(HS),水平同步信号(VS)。
④ 水平同步信号
电路中常用HS或HSYNC表示,详细说明下一小节会说明。
⑤ 垂直同步信号(帧同步或场同步)
电路中常用VS或VSYNC表示,相信说明下一小节会说明。
⑥ LCD背光电源控制信号
所谓背光,就是在LCD显示屏的背部有很多的灯珠,用它们来照亮屏幕。
背光电路可以用GPIO引脚控制,输出高低电平表示亮灭,只有亮灭两种状态;也可以用PWM引脚来控制,它可以输出占空比不同的方波,根据占空比来调节LCD的亮度,更加精细。
100ASK_IMX6ULL开发板的LCD接口定义(在资料光盘/05_Hardware(原理图)->Base_board->100ask_imx6ull_v1.1.pdf)),就包含了上面所述的几种信号类型,如下图:
嵌入式设备中一般都采用TFT材质的液晶屏,如遇到别的材质的屏幕,操作方法也是相似的,可能稍微有些差异,针对差异去做修改即可,7寸1024600TN-RGB液晶屏幕接口引脚如下图,一些关键的引脚做了注释。
接下来我们查看下100ASK_7.0寸LCD手册时序图(在资料光盘/06_Datasheet(数据手册)->Extend_modules->7寸LCD模块.zip->7.0-13SPEC(7寸1024600TN-RGB).pdf):
如上图所示,从最小的像素开始分析,电子枪每次在CLK下降沿采集数据,即从数据线上得到数据,并发射到显示屏上,然后移动到下一个位置。DATA数据线上的数据来源就是前面介绍的FrameBuffer。就这样从一行的最左边,一直移动到一行的最右边,完成了一行的显示。
电子枪当打完一行的最后一个数据后,就会收到Hsync行同步信号,如上图可知该LCD的Hsync有效脉冲为低脉冲,根据时序图,一个行周期可以大致分为四部分组成:
① thp:horizontal pulse
Hsync信号的脉冲,thpw称为脉冲宽度,这个时间不能太短,太短电子枪可能识别不到。
② thb:horizontal back porch
③ thf:horizontal front porch
Hsync信号发出后,电子枪从最右端移动到最左端,这是需要时间的:这个移动的时间就是thb。
从Hsync结束到DE开始的区间被称为行扫描的后肩(back porch),从DE结束到Hsync开始称为前肩(front porch)。
④ thd:horizontal data
thd为数据有效区,假设一行的有效像素个数为x。
同理,电子枪被Hsync驱动,一行一行地从上面移动到最下面时,它会收到一个Vsync信号(上图中标为VSD):你应该回到原点去了。如上图可知该LCD的VSD有效脉冲为低脉冲,然后就让电子枪移动回最上边。VSD中的tvpw是脉冲宽度,tvb是移动时间,tvfp表示显示完最下一行像素,再过多久VSD才来,tvd为数据有效区,tv为打完一帧所需要的时间。假设一共有y行,则LCD的分辨率就是x*y。
电子枪打完一帧的最后一个数据后,就会收到Vsync行同步信号。根据时序图,一帧的周期可以大致分为四部分组成:
① tvp:vertical pulse
Vsync信号的脉冲,tvpw称为脉冲宽度,这个时间不能太短,太短电子枪可能识别不到。
② tvb:vertical back porch
③ tvf:vertical front porch
Vsync信号发出后,电子枪从最底端移动到最上端,这是需要时间的:这个移动的时间就是tvb。
在电子枪移动的过程中,Hsync信号会一直有,但是RGB上没有有效的数据。假设一帧信号里,含有有效数据的第1个Hsync信号发生时间称为T1;一帧里,最后一行有效数据的下一个Hsync信号发生的时间称为T2。
从Vsync结束到T1的这段时间,被称为列扫描的后肩(back porch),从T2到Vsync开始称为前肩(front porch)。
④ tvd:vertical data
tvd为数据有效区,假设一帧数据里的有效行数为y。
LCD的分辨率是:x*y。
RGB数据有效信号(DEN),高电平表示数据有效。
根据以上信息大致了解几个关键信号的时序和极性,后面章节会详细介绍。
再根据上图,我们就可以确定像素时钟是51.2Mhz。
前面的LCD硬件接口图里用到了24条数据线:R0-R7、G0-G7、B0-B7,每个像素的颜色占据3*8=24位。硬件上LCD的数据引脚连接是固定的,但是我们使用的时候,在软件上可以支持不同的像素格式,比如ARGB888,ARGB555,RGB565等等。也就是说虽然硬件上用了24条数据线,但是软件上我们可以提供24位数据,也可以只提供16位数据。当只提供16位数据时,硬件上24位数据线中会有8条数据线上没有数据。比如对于RGB565格式,R0R1R2、G0G1、B0B1B2这8条数据线上是不传输数据的,恒为0。
本实验支持ARGB888和ARGB555。
ARGB888:每个像素就占据32位数据,其中最高字节A表示灰度透明度其余RGB数据8+8+8=24BPP,因为硬件上根本没接透明度的数据线,所以透明度的数据没用上。
ARGB555:每个像素就占据16位数据,其中最高位A表示灰度透明度其余RGB数据5+5+5=15BPP,但是LCD本身没有透明度的数据线,所以透明度数据没用上。
-END-
100ask_imx6ull购买地址:
http://100ask.taobao.com (点开第一个海报即可进入)
以后会不定期连载100ASK_IMX6ULL裸机文档。
是否意犹未尽? 100ASK_IMX6ULL 裸机文档完整版(600页)下载
下载方法一,
a.
下载安装Git Bash工具 :
https://gitforwindows.org/
b.
打开Git Bash,执行命令:
git clone https://gitee.com/weidongshan/imx6ull_NoosProgramProject.git
大概1分钟,下载成功后,你会在C:\Users 目录下,你自己的用户目录里,看到一个imx6ull_NoosProgramProject目录。
下载方法二,
百度网盘,
链接:
https://eyun.baidu.com/s/3smDzFAH
密码:LDCn
路径:
100ask_imx6ull_2020.02.29_v2.0
->10_裸机程序及文档
嵌入式Linux应用开发完全手册第2版_韦东山全系列视频文档全集.pdf的第四篇 裸机开发 。
我们推荐您使用下载速度更快的GIT下载。