Linux 驱动之 ALSA(二)编解码器类驱动相关概念
编解码器类驱动程序是最基本的,他实现的代码应该利用编解码器设备并公开其硬件属性,以便 amixer 等用户空间工具可以使用它。
由于驱动程序针对特定的编解码器,因此它应该包含音频控制、音频接口功能、编解码器 DAPM 定义和 I/O 功能,每个编解码器必须满足:
通过定义 DAI 和 PCM 配置来提供与其他模块的接口
提供编解码器控制 I/O hook(使用 I2C、SPI 的 API)
根据用户空间的需要,公开其他内核控件(Kernel control,Kcontrol)以动态控制模块行为
定义 DAPM widget,为动态电源切换建立 DAPM 路由,并提供 DAC 数字静音控制(option)
Component
包含编解码器的路由、widget、控件金额一组编解码器相关函数回调指针,以及一个或多个 dai 驱动。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686 ...
Linux 驱动之 ALSA(一)概述
ASOC
ALSA 是为桌面计算机而设计的,没有考虑嵌入式设备的限制,在处理嵌入式设备时会产生很多问题,包括但不限于如下:
编解码器和 CPU 之间的耦合太强,导致代码移植困难。
没有处理用户音频相关行为通知的标准方法,在移动场景中,用户的相关音频操作很频繁。
在最初的 ALSA 设置中没有考虑 PM 机制。
ASOC 就是为了解决以上问题而产生的。ALSA(ALSA system on chip, ASOC)层的目的是为嵌入式处理器和各种编解码器提供更好的 ALSA 支持。ASOC 具有以下优势:
独立的编解码器驱动程序。
更方便的配置 CPU 和编解码器动态音频电源管理(dynamic audio power management, DAPM)之间的音频数据接口。
减少弹出和点击操作,并增加与平台相关的控件。
为了实现上述功能,ASoC 将嵌入式音频系统划分为 3 个可重用的组件驱动程序,即机器类(machine class)、平台类(platform class)和编解码器类(codec)。其中,平台类和编解码器类是跨平台(cross-platform)的,而机器类是 ...
USB 子系统(四)USB Gadget 驱动
USB 控制器可以呈现出两种不同的状态。USB 控制器作为 Host 时,称为 USB 主机控制器,使用 USB 主机控制器驱动。USB 控制器作为 Device 时,称为 USB 设备控制器,使用 UDC(usb device controller)驱动。
USB 控制器作为 Device 时,最上层的是 Gadget Function 驱动,代表了具体设备的驱动,如 U 盘、USB 串口、USB 虚拟网卡、UAC 驱动。Composite 层是一个可选的中间层,可通过一种配置或多种配置高效的支持多种功能的设备,简化了 USB 复合设备驱动的开发。目前最流行的是使用基于 Composite 和 configfs 实现的 USB gadget configfs,可在用户空间灵活的配置 USB 设备。UDC 驱动直接访问硬件,控制 USB 设备与 USB 主机之间的通信。
Bus/Device/Driver模型
“USB接口"是逻辑上的USB设备,我们编写的usb_driver驱动程序,支持的是"USB接口”:
USB控制器或Hub识别出USB设备后,会创建、注册usb_de ...
USB 子系统(三)USB 设备描述符
标准设备请求
SETUP 事务的数据格式
Host 使用控制传输来识别设备、设置设备地址、启动设备的某些特性,对于控制传输,它首先发出"setup 事务",如下:
在"setup 事务"中,
SETUP 令牌包:用来通知设备,“要开始传输了”。
DATA0 数据包:它含有固定的格式,用来告诉设备"是读还是写"、“读什么”、“写什么”。
Hos 通过 DATA0 数据包发送 8 字节数据给设备,它的格式如下图所示:
标准设备请求
控制传输的建立事务中,可以使用下列格式的数据:
上表中各个"宏"取值如下:
设备/配置/接口/端点
在 SETUP 事务的数据里,表示了要访问的是什么:Device?Interface?Endpoint?
对于一个 USB 设备,它可以多种配置 (Configuration)。比如 4G 上网卡就有 2 种配置:U 盘、上网卡。第 1 次把 4G 上网卡插入电脑时,它是一个 U 盘,可以安装里面的程序。装好程序后,把它再次插入电脑,它就是一个上网卡。驱动程序可以选择让它工作于哪种配置,同一时间只能有一种配置。大多数的 USB 设备只有一种配 ...
USB 子系统(二)USB 协议层数据格式
硬件拓扑结构
compound device :多个设备组合起来,通过 HUB 跟 Host 相连
composite device :一个物理设备有多个逻辑设备 (multiple interfaces)
在软件开发过程中,我们可以忽略 Hub 的存在,硬件拓扑图简化如下:
一个物理设备里面可能有多个逻辑设备,Hos 可以外接多个逻辑设备,硬件拓扑图如下:
协议层
寻址设备阶段:USB 系统是一个 Host 对应多个设备,要传输数据首先要通知设备
发出 IN 令牌包:表示想读数据,里面含有设备地址
发出 OUT 令牌包:表示想写数据,里面含有设备地址
数据传输阶段
Host 想读数据:发出 IN 令牌包后读取数据包
Host 想发出数据:发出 OUT 令牌包后发出数据包
数据确认阶段
Host 读数据,设备可能未就绪,就会回应 NAK 包
Host 写数据,它发出数据后,设备正确接收了,就回复 ACK 包
SYNC 域
Host 发出 SOP 信号后,就会发出 SYNC 信号(前一节的那个 K-J-K-J-K-J-K 信号):它是一系列的、最大 ...
USB 子系统(一)USB 电器特性
USB 2.0 协议支持 3 种速率:低速 (Low Speed,1.5Mbps)、全速 (Full Speed, 12Mbps)、高速 (High Speed, 480Mbps)。
USB Hub、USB 设备,也分为低速、全速、高速三种类型。一个 USB 设备,可能兼容低速、全速,可能兼容全速、高速,但是不会同时兼容低速、高速。
USB 设备状态切换图
连接 (Attached):USB 设备在已连接到 USB,但还没有上电的时候处于连接状态。
上电 (Powered):USB 设备在已连接到 USB,并且已经上电,但还没有被复位的时候,处于上电状态。
USB 设备的电源获取分为两种,一种是通过外部电源进行获取,另一种是通过设备所连接的集线器 (hub) 处获得电源。通过外部供电的 USB 设备被称为自供电 (self-powered) 设备。尽管自供电设备在连接到 USB 之前可能已经有了电源,但在连接到 USB 并且 VBUS 被应用到设备之前,它们不被认为是处于上电状态。USB 设备可以同时支持自供电和总线供电 (bus-powered) 的配置。某些设备配置支持任 ...
ISP YUV 域之 CE(Contrast Enhancement)
相关概念
直方图 Histogram
在分析图像数据的统计特性时,有时可以抛弃图像的色度分量,只考察图像的亮度分量,此时可以引入图像的亮度直方图(Luminance Histogram),以常用的 8 位精度图像为例,直方图的 X 轴为 0~255,共 256 个桶,每个桶刚好覆盖 1 个像素值,直方图的 Y 轴表示每个桶盛纳了多少个像素。所有桶中盛纳的像素数加到一起应等于图像的总像素数。
在分析画面的亮暗特征,人们经常把亮度区间定性地划分成暗调、阴影、中调、亮调、高光等几个区域,各区域的边界则可以根据应用特点灵活掌握。
当需要分析图像的颜色特性时,可以引入通道直方图(Channel Histogram),分别对 R/G/B 三个颜色通道进行直方图统计。
对比度 Contrast
图像对比度指的是一幅图像中最亮的白和最暗的黑之间灰度反差的大小。差异越大代表对比越大,否则对比越小。一种常用的定量度量方法是 Michelson 对比度,定义为
CM=IMax−IMinIMax+IMinC_M = \frac{I_{Max} - I_{Min}}{I_{Max} + I_{Min ...
ISP YUV 域之 HueAndSaturation
色调 Hue
hue 的定义
hue 可以理解为占主导地位的纯色颜色,或两种纯色颜色的组合。简单来说,hue 就是颜色的“名字”,人们最常用黄色、橙色等概念来描述一个颜色。
Hue is the color portion of the model, expressed as a number from 0 to 360 degrees.
Red: 0 and 60 degrees。
Yellow: 61 and 120 degrees。
Green: 121 and 180 degrees。
Cyan: 181 and 240 degrees。
Blue: 241 and 300 degrees。
Magenta: 301 and 360 degrees。
色调恒常 Hue constancy
描述一个颜色的三个参数是 hue, lightness, chroma (saturation)。
色调恒常是指,当颜色的 lightness/saturation 改变时,色调的感知(sensation)保持不变。否则就是发生了色调漂移(hue shift)。
Tint = 在 ...
ISP YUV 域之 EdgeEnhancement
Retinex 理论
Retinex 这个词由 Retina 和 Cortex 两个单词组成。在 Retinex 理论中,物体的颜色是由物体对长波、中波和短波光线的反射能力决定的,而不是由反射光强度的绝对值决定的,并且物体的色彩不受光照非均性的影响,具有一致性。
在 Retinex 理论中,人眼得到的图像数据取决于入射光和物体表面对入射光的反射。如上图所示,I(x,y) 是我们最终得到的图像数据,先是由入射光照射,然后经由物体反射进入成像系统,最终形成我们所看到的图像。该过程可以用公式表示:
I(x,y)=R(x,y)⋅L(x,y)I(x,y) = R(x,y) \cdot L(x,y)
I(x,y)=R(x,y)⋅L(x,y)
其中,I(x,y) 代表被观察或照相机接收到的图像信号;L(x,y) 代表环境光的照射分量 ;R(x,y) 表示携带图像细节信息的目标物体的反射分量。将该式子两边取对数,可以得到物体原本的信息:
log[I(x,y)]=log[R(x,y)]−log[L(x,y)]log[I(x,y)] = log[R(x,y)] - log[L(x,y)]
log[ ...
ISP Raw 域之 BayerDemosaic
Bayer Demosaic 概述
RAW 域的最后一步处理是 Demosaic,将像素从 RAW 域变换到 RGB 域进行下一阶段的处理。Demosaic 算法的主要难点在于,RAW 域的任何一个像点(photosite)只包含一个真实的采样值,而构成像素(R,G,B)的其它两个值需要从周围像点中预测得到。既然是预测,就一定会发生预测不准的情况,这是不可避免的,而预测不准会带来多种负面影响,包括拉链效应(zipper artifacts),边缘模糊,颜色误差等。
所以 Demosaic 算法的主要挑战就是尽量提高算法的准确性,减少图像边缘损失和颜色误差。
Bayer 格式图像色彩恢复时有两种思路:
无方向性插值:不加边缘方向判断(思路:临近像素的均值),直接利用周围像素信息恢复
有方向性插值:先判断边缘方向,再利用周围像素信息恢复
Bayer 格式图像的绿色成分占比例较多,信息较丰富,色彩恢复时步骤通常是:a、先恢复 G 通道;b、再利用 G 通道信息恢复 R、B 通道。
CFA 双线性插值
无边缘检测
绿色像素上的 R,B 值分别由相邻的 2 个 R,B 像素 ...
