显示技术介绍(3)_CRT技术

作者:wowo 发布于:2016-1-30 22:18 分类:显示

CRT(Cathode Rays Tube,阴极射线管)是最原始的电子显示技术,在上世纪被广泛运用于模拟电视(Analog television)系统中。本文将以模拟电视系统为背景,介绍CRT显示技术的原理、特性以及一些关键术语。

众所周知,CRT显示已经逐步被数字显示取代,已有退出历史舞台之势,本文之所以介绍它,原因有三:

1)模拟电视是我们这一代人童年的记忆,美好又神秘。现在回头去看,发觉其中的技术是那么的简单、有趣,值得一说。

2)帮助理解显示时序(video mode,or display timings)。对写过显示驱动的人来说,显示屏的那长长一串的时序相关的参数(xres, yres, hsync len, vsync len, left margin, etc.),足以让自己崩溃。追根溯源,它们产生于CRT技术,现在之所以还存在,很大程度上是CRT的延续,没有太多实质的意义。

3)现在很多前沿的显示技术,如PDP、FED等,都和CRT的工作机制类似(具体可以参考“显示技术介绍(2)_电子显示的前世今生”中的介绍)。理解CRT是理解这些新技术的基础。

阅读全文>>

标签: CRT scan blank unblank front porch back

评论(7) 浏览(18563)

蓝牙协议分析(2)_协议架构

作者:wowo 发布于:2016-1-14 22:20 分类:蓝牙

本文是蓝牙协议分析的第二篇文章,在“蓝牙协议分析(1)_基本概念”的基础上,从整体架构的角度,了解蓝牙协议的组成,以便加深对蓝牙的理解。

阅读全文>>

标签: Bluetooth l2cap profile hci gap

评论(54) 浏览(83990)

显示技术介绍(2)_电子显示的前世今生

作者:wowo 发布于:2015-11-30 22:19 分类:显示

从1907年证实CRT(Cathode Ray Tube)技术可用于电视显示至今,电子显示技术经历了近100年的发展。100年的时间,说长不长,说短也不短;显示技术的发展,说快不快,说慢也不慢。

CRT技术是最原始的显示技术,但它的生命周期一直持续到2000年后,随着LCD(Liquid Crystal Display)的普及才逐渐退出历史舞台,跨度近90年,这是“不快”的由来。

而最近10年,各种新显示技术,又有层出不穷、快速发展之势,如OLED(Organic light-emitting diode display)、电子墨水(E Ink)、激光电视(Laser TV)、IMOD(Interferometric modulator display)等2D显示技术,如激光显示(Laser display)、光场显示(Light field display)等3D显示技术,这是“不慢”的由来。

蜗蜗本来只打算focus在Linux显示子系统的分析上,不想涉及太多的“题外话”,但专业技术的诱惑力,实在不比linux kernel小。另外,网上真正关注“技术”本身的资料又太少(大多是为了卖电视而写的软文)。因此就在兴趣的驱动下,对显示技术的发展做了一些较深入的了解,顺便在此记录一下。这就是本文以及后续相关文章的由来。

当然,只有兴趣还远远不够,因为任何商业化的技术背后,都有很多基础学科的支撑,数学、物理学、化学、材料学、等等。而离开学校越久远,对这些基础知识越生疏,也只能浅尝辄止了。不过还好,有强大的WJ百科,可以事半功倍,本文大多参考并翻译自下面链接,有兴趣的读者可以自行阅读:

https://en.wikipedia.org/wiki/History_of_display_technology

https://en.wikipedia.org/wiki/Display_device

阅读全文>>

标签: CRT LED OLED Laser IMOD

评论(2) 浏览(16135)

ARM64的启动过程之(六):异常向量表的设定

作者:linuxer 发布于:2015-11-24 18:22 分类:ARMv8A Arch

本文主要描述了4.1.10内核初始化过程中如何初始化异常向量表。当然,首先需要准备一些异常的基础知识,这主要在第二章,如果你非常熟悉 ARM64的异常,那么可以忽略这个章节。 第三章描述了ARM64上各种形形色色的异常,第四章描述了ARM64上硬件提供的协助,最后一章描述了代码过程。

为了简化,本文对所描述的异常进行了限制:

1、所有的exception level的运行状态都是AArch64,不考虑异常发生在AArch32 excution state的时候

2、不考虑支持security extension,也就是说EL3状态的异常处理也不在本文描述

3、不考虑virtualization的支持,也就是说EL2的异常处理不会在本文描述

一句话总结,本文主要描述EL0和EL1这两个exception level下的异常向量表的设定。

阅读全文>>

标签: arm64 exception

评论(19) 浏览(64594)

显示技术介绍(1)_概述

作者:wowo 发布于:2015-11-22 21:44 分类:显示

本文是显示子系统的第一篇文章,介绍嵌入式系统显示有关的硬件组成,进而拆分为相对独立的模块,以便在后续的文章中一一介绍。

阅读全文>>

标签: 显示 GPU 2D 3D

评论(10) 浏览(14045)

ARM64的启动过程之(五):UEFI

作者:linuxer 发布于:2015-10-30 19:27 分类:ARMv8A Arch

在准备大刀阔斧进入start_kernel之际,我又重新review了一下head.S文件,看看是否有一些遗漏的知识点,很不幸,看到了 CONFIG_EFI这个配置项。当然,在一年前阅读kernel代码的时候就了解过相关的内容,但是,做为一个嵌入式工程师总是或多或少对其有些排斥, 因此习惯性的忽略掉CONFIG_EFI相关的代码,逃避总不是办法,在本文中,我们一起来探讨ARM64平台上UEFI相关的内容。

阅读全文>>

标签: arm64 UEFI

评论(5) 浏览(45202)

ARM64的启动过程之(四):打开MMU

作者:linuxer 发布于:2015-10-24 12:35 分类:ARMv8A Arch

经过漫长的前戏,我们终于迎来了打开MMU的时刻,本文主要描述打开MMU以及跳转到start_kernel之前的代码逻辑。这一节完成之后,我们就会离开痛苦的汇编,进入人民群众喜闻乐见的c代码了。

阅读全文>>

标签: 打开MMU

评论(52) 浏览(58240)

ARM64的启动过程之(三):为打开MMU而进行的CPU初始化

作者:linuxer 发布于:2015-10-21 19:32 分类:ARMv8A Arch

上一节主要描述了为了打开MMU而进行的Translation table的建立,本文延续之前的话题,主要是进行CPU的初始化(注:该初始化仅仅为是为了turn on MMU)。

本文主要分析ARM64初始化过程中的__cpu_setup函数,代码位于arch/arm64/mm/proc.S中。主要的内容包括:

1、cache和TLB的处理

2、Memory attributes lookup table的构建

3、SCTLR_EL1、TCR_EL1的设定

阅读全文>>

标签: ARM64启动过程 MMU

评论(10) 浏览(42214)

ARM64的启动过程之(二):创建启动阶段的页表

作者:linuxer 发布于:2015-10-13 18:18 分类:ARMv8A Arch

本文主要描述了ARM64启动过程中,如何建立初始化阶段页表的过程。我们知道,从bootloader到kernel的时候,MMU是off的 (顺带的负作用是无法打开data cache),为了提高性能,加快初始化速度,我们必须某个阶段(越早越好)打开MMU和cache,而在此之前,我们必须要设定好页表。

在 初始化阶段,我们mapping三段地址,一段是identity mapping,其实就是把物理地址mapping到物理地址上去,在打开MMU的时候需要这样的mapping(ARM ARCH强烈推荐这么做的)。第二段是kernel image mapping,内核代码欢快的执行当然需要将kernel running需要的地址(kernel txt、dernel rodata、data、bss等等)进行映射了,第三段是blob memory对应的mapping。

在本文中,我们会混用下面的概念:page table和translation table、PGD和Level 0 translation table、PUD和Level 1 translation table、PMD和Level 2 translation table、Page Table和Level 3 translation table。最后,还是说明一下,本文来自4.4.6内核,有兴趣的读者可以下载来对照阅读本文。


阅读全文>>

标签: __create_page_tables

评论(42) 浏览(59564)

ARM64的启动过程之(一):内核第一个脚印

作者:linuxer 发布于:2015-10-10 15:06 分类:ARMv8A Arch

kernel的整个启动过程涉及的内容很多,不可能每一个细节都描述清楚,因此我打算针对部分和ARM64相关的启动步骤进行学习、 整理,并方便后续查阅。本文实际上描述在系统启动最开始的时候,bootloader和kernel的交互以及kernel如何保存bootloader 传递的参数并进行校验,此外,还有一些最基础的硬件初始化的内容。

本文中的source来自4.1.10内核,这是一个long term的版本,后续一段时间的文章都会基于这个long term版本进行。

阅读全文>>

标签: arm64 初始化

评论(41) 浏览(81863)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog