Skip to content

Commit

Permalink
upload 03_lcd pincture
Browse files Browse the repository at this point in the history
  • Loading branch information
weidongshan committed Jan 2, 2024
1 parent da640bc commit e7bc43a
Show file tree
Hide file tree
Showing 14 changed files with 43 additions and 43 deletions.
10 changes: 5 additions & 5 deletions docs/03_LCD/01_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

LCD由一个一个像素组成:每行有xres个像素,有yres行,它的分辨率是:xres * yres。

![image-20210102120046007](pic/02_LCD驱动/001_lcd_pixels.png)
![image-20210102120046007](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/001_lcd_pixels.png)

只要我们能控制任意一个像素的颜色,就可以在LCD上绘制文字、图片。

Expand All @@ -25,7 +25,7 @@ LCD由一个一个像素组成:每行有xres个像素,有yres行,它的分
* rgb565:用5位表示红、6位表示绿、5位表示蓝
* rgb555:16位数据中用5位表示红、5位表示绿、5位表示蓝,浪费一位

![image-20210102120550503](pic/02_LCD驱动/002_rgb.png)
![image-20210102120550503](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/002_rgb.png)



Expand All @@ -39,7 +39,7 @@ LCD由一个一个像素组成:每行有xres个像素,有yres行,它的分
* 每块数据的大小可能是16位、32位,这跟LCD上像素的颜色格式有关
* 设置好LCD硬件后,只需要把颜色数据写入Framebuffer即可

![image-20210102122113840](pic/02_LCD驱动/003_framebuffer.png)
![image-20210102122113840](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/003_framebuffer.png)



Expand All @@ -52,7 +52,7 @@ LCD由一个一个像素组成:每行有xres个像素,有yres行,它的分

#### 2.1 统一的LCD硬件模型

![image-20210102122959506](pic/02_LCD驱动/004_lcd_hardware_block.png)
![image-20210102122959506](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/004_lcd_hardware_block.png)

#### 2.2 MCU常用的8080接口LCD模组

Expand Down Expand Up @@ -87,5 +87,5 @@ LCD由一个一个像素组成:每行有xres个像素,有yres行,它的分
* Supports one data lane/maximum speed 500Mbps
* Supports DSI version 1.01
* Supports D-PHY version 1.00
![image-20210102124710351](pic/02_LCD驱动/005_mipi_dsi.png)
![image-20210102124710351](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/005_mipi_dsi.png)

4 changes: 2 additions & 2 deletions docs/03_LCD/02_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

### 1. 怎么编写字符设备驱动程序

![image-20210104082508191](pic/02_LCD驱动/006_char_device_driver.png)
![image-20210104082508191](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/006_char_device_driver.png)

* 驱动主设备号
* 构造file_operations结构体,填充open/read/write等成员函数
Expand Down Expand Up @@ -59,7 +59,7 @@ kernel:
核心:
![image-20210104110840858](pic/02_LCD驱动/007_fb_info.png)
![image-20210104110840858](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/007_fb_info.png)
* 分配fb_info
Expand Down
2 changes: 1 addition & 1 deletion docs/03_LCD/04.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ doc_and_source_for_drivers\IMX6ULL\source\03_LCD\02_lcd_drv_qemu\lcd_drv.c
Linux驱动 = 驱动框架 + 硬件操作。
如果硬件操作足够简单,我们就可以把精力放在驱动程序的框架上,这才是Linux的核心。
看看真实的LCD连线:
![image-20210102122959506](pic/02_LCD驱动/004_lcd_hardware_block.png)
![image-20210102122959506](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/004_lcd_hardware_block.png)

对于硬件操作,你至少要做这些事情:

Expand Down
2 changes: 1 addition & 1 deletion docs/03_LCD/05.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,4 +150,4 @@ QEMU所用的内核里已经带有LCD驱动程序了,要测试我们编写的

使用新内核启动QEMU后,执行fb-test及可测试。

![image-20210105192700912](pic/02_LCD驱动/008_fb_test.png)
![image-20210105192700912](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/008_fb_test.png)
4 changes: 2 additions & 2 deletions docs/03_LCD/07_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@

#### 1.1 8080接口原理图

![image-20210108143358182](pic/02_LCD驱动/009_8080-sch.png)
![image-20210108143358182](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/009_8080-sch.png)

#### 1.2 TFT-RGB接口原理图

![image-20210108144641203](pic/02_LCD驱动/010_tft_rgb_sch.png)
![image-20210108144641203](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/010_tft_rgb_sch.png)



Expand Down
6 changes: 3 additions & 3 deletions docs/03_LCD/08_1 .md → docs/03_LCD/08_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@

#### 1.1 TFT-RGB接口原理图

![image-20210108144641203](pic/02_LCD驱动/010_tft_rgb_sch.png)
![image-20210108144641203](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/010_tft_rgb_sch.png)



### 2. TFT-RGB接口时序图

#### 2.1 LCD时序图

![image-20210109154452505](pic/02_LCD驱动/011_tft-rgb_timing.png)
![image-20210109154452505](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/011_tft-rgb_timing.png)

#### 2.2 LCD控制器时序图

![image-20210109154234559](pic/02_LCD驱动/012_lcd_controller_timing.png)
![image-20210109154234559](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/012_lcd_controller_timing.png)

26 changes: 13 additions & 13 deletions docs/03_LCD/09_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ IMX6ULL的LCD控制器名称为eLCDIF(Enhanced LCD Interface,增强型LCD接
* 8/16/18/24/32 bit 的bpp数据都支持,取决于IO的复用设置及寄存器配置
* MPU模式,VSYNC模式,DOTCLK模式,都可以配置时序参数。

![](pic/02_LCD驱动/013_Lcd_Controller_block.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/013_Lcd_Controller_block.png)

上图是IMX6ULL的LCD控制器框图。
我们在内存中划出一块内存,称之为显存,软件把数据写入显存。
Expand All @@ -38,7 +38,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

* 框图:

![image-20210113111156309](pic/02_LCD驱动/025_write_data_path.png)
![image-20210113111156309](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/025_write_data_path.png)

* 举例说明:见视频

Expand All @@ -55,15 +55,15 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。
① 怎么把LCD的信息告诉LCD控制器:即分辨率、行列时序、像素时钟等;
② 怎么把显存地址、像素格式告诉LCD控制器。

![](pic/02_LCD驱动/014_Lcd_Controller_registers.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/014_Lcd_Controller_registers.png)

上图是我们将要使用到的寄存器,下面逐个讲解这些寄存器,在后续的LCD控制编程实验会用到。



#### 2.1 LCDIF_CTRL寄存器

![](pic/02_LCD驱动/015_LCDIF_CTRL.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/015_LCDIF_CTRL.png)



Expand Down Expand Up @@ -98,7 +98,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

#### 2.2 LCDIF_CTRL1寄存器

![](pic/02_LCD驱动/016_LCDIF_CTRL1.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/016_LCDIF_CTRL1.png)

本实验中使用TFT LCD,LCD控制器使用DOTCLK模式。本寄存器中其他用不到的位,就不介绍了。

Expand All @@ -111,7 +111,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

#### 2.3 LCDIF_TRANSFER_COUNT寄存器

![](pic/02_LCD驱动/017_LCDIF_TRANSFER_COUNT.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/017_LCDIF_TRANSFER_COUNT.png)



Expand All @@ -124,7 +124,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

#### 2.4 LCDIF_VDCTRL0寄存器

![](pic/02_LCD驱动/018_LCDIF_VDCTRL0.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/018_LCDIF_VDCTRL0.png)



Expand All @@ -148,7 +148,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

#### 2.5 LCDIF_VDCTRL1寄存器

![](pic/02_LCD驱动/019_LCDIF_VDCTRL1.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/019_LCDIF_VDCTRL1.png)



Expand All @@ -160,7 +160,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

#### 2.6 LCDIF_VDCTRL2寄存器

![](pic/02_LCD驱动/020_LCDIF_VDCTRL2.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/020_LCDIF_VDCTRL2.png)

​ HSYNC_PULSE_WIDTH:水平同步信号脉冲宽度;

Expand All @@ -175,7 +175,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

#### 2.7 LCDIF_VDCTRL3寄存器

![](pic/02_LCD驱动/021_LCDIF_VDCTRL3.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/021_LCDIF_VDCTRL3.png)



Expand All @@ -190,7 +190,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

#### 2.8 LCDIF_VDCTRL4寄存器

![](pic/02_LCD驱动/022_LCDIF_VDCTRL4.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/022_LCDIF_VDCTRL4.png)



Expand All @@ -204,7 +204,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

#### 2.9 LCDIF_CUR_BUF寄存器

![](pic/02_LCD驱动/023_LCDIF_CUR_BUF.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/023_LCDIF_CUR_BUF.png)

| 位域 || 读写 | 描述 |
| ------ | ---- | ---- | --------------------------------------- |
Expand All @@ -214,7 +214,7 @@ LCD控制器有两个时钟域:外设总线时钟域,LCD像素时钟域。

#### 2.10 LCDIF_NEXT_BUF寄存器

![](pic/02_LCD驱动/024_LCDIF_NEXT_BUF.png)
![](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/024_LCDIF_NEXT_BUF.png)



Expand Down
10 changes: 5 additions & 5 deletions docs/03_LCD/10_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ Linux驱动程序 = 驱动程序框架 + 硬件编程。

#### 1.1 入口函数注册platform_driver

![image-20210115143432185](pic/02_LCD驱动/027_lcd_platform_driver.png)
![image-20210115143432185](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/027_lcd_platform_driver.png)

#### 1.2 设备树有对应节点

![image-20210115143739850](pic/02_LCD驱动/028_lcd_device_tree_node.png)
![image-20210115143739850](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/028_lcd_device_tree_node.png)

#### 1.3 probe函数分析

Expand Down Expand Up @@ -64,7 +64,7 @@ Linux驱动程序 = 驱动程序框架 + 硬件编程。
* 本课程专注于LCD,所以使用pinctrl简化程序

设备树`arch/arm/boot/dts/100ask_imx6ull-14x14.dts`中:
![image-20210115201314109](pic/02_LCD驱动/029_lcd_device_tree_pinctrl.png)
![image-20210115201314109](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/029_lcd_device_tree_pinctrl.png)



Expand All @@ -74,7 +74,7 @@ Linux驱动程序 = 驱动程序框架 + 硬件编程。

IMX6ULL的LCD控制器涉及2个时钟:

![image-20210115094603032](pic/02_LCD驱动/026_imx6ull_lcd_controller_clock.png)
![image-20210115094603032](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/026_imx6ull_lcd_controller_clock.png)

代码里直接使用时钟子系统的代码。

Expand Down Expand Up @@ -136,7 +136,7 @@ IMX6ULL的LCD控制器涉及2个时钟:
* 文件:drivers\video\fbdev\mxc\ldb.c
* 代码:
![image-20210115201815912](pic/02_LCD驱动/030_set_clk.png)
![image-20210115201815912](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/030_set_clk.png)
Expand Down
2 changes: 1 addition & 1 deletion docs/03_LCD/12_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
* 下载开发板配套资料
* 下载完后,工具在如下目录里:

![image-20210121150934195](pic/02_LCD驱动/031_pins_tools.png)
![image-20210121150934195](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/031_pins_tools.png)

### 1. 硬件相关的操作

Expand Down
4 changes: 2 additions & 2 deletions docs/03_LCD/13_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
* 下载开发板配套资料
* 下载完后,工具在如下目录里:

![image-20210121150934195](pic/02_LCD驱动/031_pins_tools.png)
![image-20210121150934195](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/031_pins_tools.png)

### 1. 硬件相关的操作

Expand All @@ -51,7 +51,7 @@ LCD驱动程序的核心就是:

#### 2.1 芯片手册

![image-20210123151827981](pic/02_LCD驱动/032_lcd_controller_clk.png)
![image-20210123151827981](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/032_lcd_controller_clk.png)

#### 2.2 设备树

Expand Down
4 changes: 2 additions & 2 deletions docs/03_LCD/14_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
* 下载开发板配套资料
* 下载完后,工具在如下目录里:

![image-20210121150934195](pic/02_LCD驱动/031_pins_tools.png)
![image-20210121150934195](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/031_pins_tools.png)

### 1. 硬件相关的操作

Expand Down Expand Up @@ -99,7 +99,7 @@ LCD驱动程序的核心就是:

时序参数、引脚极性等信息,都被保存在一个display_timing结构体里:

![image-20210125185526592](pic/02_LCD驱动/033_display_timing.png)
![image-20210125185526592](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/033_display_timing.png)

参考内核文件:

Expand Down
4 changes: 2 additions & 2 deletions docs/03_LCD/15_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
* 下载开发板配套资料
* 下载完后,工具在如下目录里:

![image-20210121150934195](pic/02_LCD驱动/031_pins_tools.png)
![image-20210121150934195](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/031_pins_tools.png)

### 1. 硬件相关的操作

Expand Down Expand Up @@ -99,7 +99,7 @@ LCD驱动程序的核心就是:

时序参数、引脚极性等信息,都被保存在一个display_timing结构体里:

![image-20210125185526592](pic/02_LCD驱动/033_display_timing.png)
![image-20210125185526592](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/033_display_timing.png)

参考内核文件:

Expand Down
2 changes: 1 addition & 1 deletion docs/03_LCD/16.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,5 +152,5 @@ obj-$(CONFIG_FB_MXS) += lcd_drv.o
* 设备树中pwm节点、framebuffer-mylcd节点,都使用到的同一个引脚:PAD_GPIO1_IO08

* 解决方法:修改`arch/arm/boot/dts/100ask_imx6ull-14x14.dts`,禁止pwm节点,如下:
![image-20210128152304236](pic/02_LCD驱动/034_disable_pwm_in_devicetree.png)
![image-20210128152304236](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/034_disable_pwm_in_devicetree.png)

6 changes: 3 additions & 3 deletions docs/03_LCD/17_1.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
* LCD控制器继续读取数据,于是LCD上就会显示半屏幕蓝色、半屏幕红色
* 人眼就会感觉到屏幕闪烁、撕裂

![image-20210203172823180](pic/02_LCD驱动/048_singble_buffer.png)
![image-20210203172823180](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/048_singble_buffer.png)

### 2. 使用多Buffer来改进

Expand All @@ -52,7 +52,7 @@

流程如下:

![image-20210203180534206](pic/02_LCD驱动/049_drv_app_use_double_buff.png)
![image-20210203180534206](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/049_drv_app_use_double_buff.png)

* 驱动:分配多个buffer

Expand Down Expand Up @@ -122,7 +122,7 @@
```
示例:
![image-20210203180357860](pic/02_LCD驱动/050_mxsfb_pan_display.png)
![image-20210203180357860](https://photos.100ask.net/linuxdevicedriver-traning/03_LCD/pic/050_mxsfb_pan_display.png)
Expand Down

0 comments on commit e7bc43a

Please sign in to comment.