From 501c6999a11ecd3fe6933c55cfdbb78ac13821c9 Mon Sep 17 00:00:00 2001 From: yafeng_wang Date: Mon, 7 Mar 2022 10:45:25 +0800 Subject: [PATCH] docs: Modify some details and adjust the document structure. Signed-off-by: yafeng_wang --- .../driver/driver-platform-adc-des.md | 236 +++--- .../driver/driver-platform-hdmi-des.md | 697 +++++------------- .../driver/driver-platform-hdmi-develop.md | 316 ++++---- .../driver/driver-platform-i3c-des.md | 468 ++++-------- .../driver/driver-platform-i3c-develop.md | 360 +++++---- ...0\346\265\201\347\250\213\345\233\276.png" | Bin 7488 -> 23083 bytes ...7\347\273\223\346\236\204\345\233\276.png" | Bin 104415 -> 68235 bytes 7 files changed, 799 insertions(+), 1278 deletions(-) diff --git a/zh-cn/device-dev/driver/driver-platform-adc-des.md b/zh-cn/device-dev/driver/driver-platform-adc-des.md index bb9ed39d4a..ccd7fdcd5a 100755 --- a/zh-cn/device-dev/driver/driver-platform-adc-des.md +++ b/zh-cn/device-dev/driver/driver-platform-adc-des.md @@ -1,71 +1,85 @@ # ADC - [概述](#section1) -- [接口说明](#section2) -- [使用指导](#section3) - - [使用流程](#section4) - - [打开ADC设备](#section5) - - [读取AD转换结果](#section6) - - [关闭ADC设备](#section7) - -- [使用实例](#section8) + - [功能简介](#section2) + - [基本概念](#section3) + - [运作机制](#section4) + - [约束与限制](#section5) +- [使用指导](#section6) + - [场景介绍](#section7) + - [接口说明](#section8) + - [开发步骤](#section9) + - [使用实例](#section10) ## 概述 +### 功能简介 + - ADC(Analog to Digital Converter),即模拟-数字转换器,是一种将模拟信号转换成对应数字信号的设备。 - ADC接口定义了完成ADC传输的通用方法集合,包括: - ADC设备管理:打开或关闭ADC设备。 - ADC读取转换结果:读取AD转换结果。 - **图 1** ADC物理连线示意图 - ![](figures/ADC物理连线示意图.png "ADC物理连线示意图") +### 基本概念 + +ADC主要用于将模拟量转换成数字量,从而便于存储与计算等。 + +ADC的主要技术参数有: + +- 分辨率 + 分辨率指的是ADC模块能够转换的二进制位数,位数越多分辨率越高。 + +- 转换误差 + 转换误差通常是以输出误差的最大值形式给出。它表示A/D转换器实际输出的数字量和理论上的输出数字量之间的差别。常用最低有效位的倍数表示。 + +- 转换时间 + 转换时间是指A/D转换器从转换控制信号到来开始,到输出端得到稳定的数字信号所经过的时间。 + +### 运作机制 + +在HDF框架中,同类型设备对象较多时(可能同时存在十几个同类型配置器),如果采用独立服务模式则需要配置更多的设备节点,且相关服务会占据更多的内存资源。相反,采用统一服务模式可以使用一个设备服务作为管理器,统一处理所有同类型对象的外部访问(这会在配置文件中有所体现),实现便捷管理和节约资源的目的。ADC模块接口适配模式采用统一服务模式。 + +ADC模块各分层的作用为:接口层提供打开设备,写入数据,关闭设备的接口。核心层主要提供绑定设备、初始化设备以及释放设备的能力。适配层实现其他具体的功能。 + +除电源线和地线之外,ADC只需要1根线与被测量的设备进行连接,其物理连线如[图1](#fig1)所示: + +**图 1** ADC物理连线示意图 +![](figures/ADC物理连线示意图.png "ADC物理连线示意图") + +### 约束与限制 + +ADC模块当前仅支持轻量和小型系统内核(LiteOS) 。 + +## 使用指导 -## 接口说明 +### 场景介绍 + +ADC设备通常用于将模拟电压转换为数字量,如与咪头搭配进行声音采集、与NTC电阻搭配进行温度测量,或者将其他模拟传感器的输出量转换为数字量的场景。 + +### 接口说明 + +ADC模块提供的主要接口如[表1](#table1)所示,更多关于接口的介绍请参考对应的API接口文档。 **表 1** ADC驱动API接口功能介绍 - - - - - - - - - - - - - - - - -

功能分类

-

接口名

-

描述

-

ADC设备管理接口

-

AdcOpen

-
打开ADC设备

-

AdcClose

-

关闭ADC设备

-

ADC读取转换结果接口

-

AdcRead

-

读取AD转换结果值

-
- -## 使用指导 - -### 使用流程 +| 接口名 | 描述 | +| -------- | ---------------- | +| AdcOpen | 打开ADC设备 | +| AdcClose | 关闭ADC设备 | +| AdcRead | 读取AD转换结果值 | + +### 开发步骤 使用ADC设备的一般流程如[图2](#fig2)所示。 **图 2** ADC使用流程图 ![](figures/ADC使用流程图.png "ADC使用流程图") -### 打开ADC设备 + +#### 打开ADC设备 在进行AD转换之前,首先要调用AdcOpen打开ADC设备。 @@ -77,34 +91,12 @@ DevHandle AdcOpen(int16_t number); - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

number

-

ADC设备号

-

返回值

-

返回值描述

-

NULL

-

打开ADC设备失败

-

设备句柄

-

打开的ADC设备句柄

-
+| 参数 | 参数描述 | +| ---------- | ----------------- | +| number | ADC设备号 | +| **返回值** | **返回值描述** | +| NULL | 打开ADC设备失败 | +| 设备句柄 | 打开的ADC设备句柄 | 假设系统中存在2个ADC设备,编号从0到1,那么我们现在打开1号设备。 @@ -114,12 +106,12 @@ DevHandle adcHandle = NULL; /* ADC设备句柄 / /* 打开ADC设备 */ adcHandle = AdcOpen(1); if (adcHandle == NULL) { - HDF_LOGE("AdcOpen: failed\n"); + HDF_LOGE("AdcOpen: fail\n"); return; } ``` -### 读取AD转换结果 +#### 读取AD转换结果 ```c int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val); @@ -129,46 +121,29 @@ int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val); - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

ADC设备句柄

-

channel

-

ADC设备通道号

-

val

-

AD转换结果

-

返回值

-

返回值描述

-

0

-

读取成功

-

负数

-

读取失败

-
- -### 关闭ADC设备 +| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | ADC设备句柄 | +| channel | ADC设备通道号 | +| val | AD转换结果 | +| **返回值** | **返回值描述** | +| 0 | 读取成功 | +| 负数 | 读取失败 | + +读取转换结果示例(以通道1为例): + +```c +uint32_t value; +int32_t ret; + +ret = AdcRead(adcHandle, 1, &value); +if (ret != 0) { + HDF_LOGE("ADC read fail!\n"); + return; +} +``` + +#### 关闭ADC设备 ADC通信完成之后,需要关闭ADC设备。 ```c @@ -178,29 +153,11 @@ void AdcClose(DevHandle handle); - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

ADC设备句柄

-

返回值

-

返回值描述

-

-

-
+| 参数 | 参数描述 | +| ------ | ----------- | +| handle | ADC设备句柄 | +| 返回值 | 返回值描述 | +| 无 | 无 | 关闭ADC设备示例: @@ -208,7 +165,7 @@ void AdcClose(DevHandle handle); AdcClose(adcHandle); /* 关闭ADC设备 */ ``` -## 使用实例 +### 使用实例 本例程以操作开发板上的ADC设备为例,详细展示ADC接口的完整使用流程。 @@ -249,7 +206,7 @@ static int32_t TestCaseAdc(void) for (i = 0; i < 30; i++) { ret = AdcRead(adcHandle, ADC_CHANNEL_NUM, &Readbuf[i]); if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: tp ADC write reg fail!:%d", __func__, ret); + HDF_LOGE("%s: ADC read fail!:%d", __func__, ret); AdcClose(adcHandle); return -1; } @@ -262,4 +219,3 @@ static int32_t TestCaseAdc(void) return 0; } ``` - diff --git a/zh-cn/device-dev/driver/driver-platform-hdmi-des.md b/zh-cn/device-dev/driver/driver-platform-hdmi-des.md index 1ad42787db..4d4809dd8b 100755 --- a/zh-cn/device-dev/driver/driver-platform-hdmi-des.md +++ b/zh-cn/device-dev/driver/driver-platform-hdmi-des.md @@ -1,137 +1,89 @@ # HDMI - [概述](#section1) -- [接口说明](#section2) -- [使用指导](#section3) - - [使用流程](#section4) - - [打开HDMI控制器](#section5) - - [注册热插拔回调函数](#section6) - - [读取EDID](#section7) - - [设置属性](#section8) - - [启动HDMI传输](#section10) - - [停止HDMI传输](#section11) - - [注销热插拔回调函数](#section12) - - [关闭HDMI控制器](#section13) - -- [使用实例](#section14) + - [功能简介](#section2) + - [基本概念](#section3) + - [运作机制](#section4) + - [约束与限制](#section5) +- [使用指导](#section6) + - [场景介绍](#section7) + - [接口说明](#section8) + - [开发步骤](#section9) + - [使用实例](#section10) ## 概述 -- HDMI(High-Definition Multiface Interface)是Hitachi, Panasonic, Philips, SiliconImage, Sony, Thomson, Toshiba共同发布的一款音视频传输协议。 -- HDMI以主从方式工作,通常有一个Source端和一个Sink端。 -- HDMI接口定义了完成HDMI传输的通用方法集合,包括: +### 功能简介 + +- HDMI(High-Definition Multiface Interface),即高清多媒体接口,主要用于DVD、机顶盒等音视频Source到TV、显示器等Sink设备的传输。 +- HDMI以主从方式工作,通常有一个Source端和一个Sink端。 +- HDMI接口定义了完成HDMI传输的通用方法集合,包括: - HDMI控制器管理:打开或关闭HDMI控制器 - HDMI启动/停止传输:启动或停止HDMI传输 - HDMI控制器设置:设置音频、视频及HDR属性,设置色彩深度、声音图像消隐等 - HDMI读取EDID:读取Sink端原始的EDID数据 - HDMI热插拔:注册/注销热插拔回调函数 -- HDMI物理连接如[图1](#fig1)所示: - **图 1** HDMI物理连线示意图 - ![](figures/HDMI物理连线示意图.png "HDMI物理连线示意图") -## 接口说明 +### 基本概念 + +HDMI(High-Definition Multiface Interface)是Hitachi、Panasonic、Philips、SiliconImage、Sony、Thomson、Toshiba共同发布的一款音视频传输协议。传输过程遵循TMDS(Transition Minimized Differential Signaling)协议。 + +- TMDS(Transition Minimized Differential signal):过渡调制差分信号,也被称为最小化传输差分信号,用于发送音频、视频及各种辅助数据。 +- DDC(Display Data Channel):显示数据通道,发送端与接收端可利用DDC通道得知彼此的发送与接收能力,但HDMI仅需单向获知接收端(显示器)的能力。 +- CEC(Consumer Electronics Control):消费电子控制,该功能应该能够在连接HDMI的发送设备与接收设备之间实现交互操作。 +- FRL(Fixed Rate Link):TMDS 的架构进行讯号传输时,最高带宽可达 18Gbps,而 FRL 模式的带宽则提升到 48 Gbps。 +- HDCP(High-bandwidth Digital Content Protection):即高带宽数字内容保护技术,当用户对高清晰信号进行非法复制时,该技术会进行干扰,降低复制出来的影像的质量,从而对内容进行保护。 +- EDID(Extended Display Identification Data):扩展显示标识数据, 通常存储在显示器的固件中,标识供应商信息、EDID版本信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串。 + +### 运作机制 + +HDMI的Source端提供+5V和GND,用于DDC和CEC通信。通过DDC通道,Source端可以读取Sink端的各项参数,如接受能力等;CEC为可选通道,用于同步Source端与Sink端的控制信号,改善用户体验。TMDS通道有四组差分信号,TMDS Clock Channel为TMDS提供时钟信号,其余三组传输音视频数据及各种辅助数据;HDP为热插拔检测端口,当有Sink端接入时,Source端会通过中断服务程序进行响应。 + +HDMI物理连接如[图1](#fig1)所示: +**图 1** HDMI物理连线示意图 +![](figures/HDMI物理连线示意图.png "HDMI物理连线示意图") + +### 约束与限制 + +HDMI模块当前仅支持轻量和小型系统内核(LiteOS) 。 + +## 使用指导 + +### 场景介绍 + +HDMI具有体积小,传输速率高,传输带宽宽,兼容性好,能同时传输无压缩音视频信号等优点。与传统的全模拟接口相比,HDMI不但增加了设备间接线的便捷性,还提供了一些HDMI特有的智能化功能,可用于小体积设备进行高质量音视频传输的场景。 + +### 接口说明 **表 1** HDMI驱动API接口功能介绍 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

功能分类

-

接口名

-

描述

-

HDMI控制器管理接口

-

HdmiOpen

-
打开HDMI控制器

-

HdmiClose

-

关闭HDMI控制器

-

启动/停止HDMI传输接口

-

HdmiStart

-
启动HDMI传输

-

HdmiStop

-

停止HDMI传输

-

HDMI控制器设置接口

-

HdmiAvmuteSet

-
HDMI声音图像消隐设置

-

HdmiDeepColorSet

-

设置色彩深度

-

HdmiDeepColorGet

-

获取色彩深度

-

HdmiSetVideoAttribute

-

设置视频属性

-

HdmiSetAudioAttribute

-

设置音频属性

-

HdmiSetHdrAttribute

-

设置HDR属性

-

EDID获取接口

-

HdmiReadSinkEdid

-
HDMI读取Sink端原始EDID数据

-

HDMI热插拔相关接口

-

HdmiRegisterHpdCallbackFunc

-
注册HDMI热插拔检测回调函数

-

HdmiUnregisterHpdCallbackFunc

-

注销HDMI热插拔检测回调函数

-
- -## 使用指导 - -### 使用流程 +| 接口名 | 描述 | +| ----------------------------- | -------------------------- | +| HdmiOpen | 打开HDMI控制器 | +| HdmiClose | 关闭HDMI控制器 | +| HdmiStart | 启动HDMI传输 | +| HdmiStop | 停止HDMI传输 | +| HdmiAvmuteSet | 声音图像消隐设置 | +| HdmiDeepColorSet | 设置色彩深度 | +| HdmiDeepColorGet | 获取色彩深度 | +| HdmiSetVideoAttribute | 设置视频属性 | +| HdmiSetAudioAttribute | 设置音频属性 | +| HdmiSetHdrAttribute | 设置HDR属性 | +| HdmiReadSinkEdid | 读取Sink端原始EDID数据 | +| HdmiRegisterHpdCallbackFunc | 注册HDMI热插拔检测回调函数 | +| HdmiUnregisterHpdCallbackFunc | 注销HDMI热插拔检测回调函数 | + +### 开发步骤 使用HDMI设备的一般流程如[图2](#fig2)所示。 **图 2** HDMI设备使用流程图 ![](figures/HDMI使用流程图.png "HDMI使用流程图") -### 打开HDMI控制器 +#### 打开HDMI控制器 在进行HDMI通信前,首先要调用HdmiOpen打开HDMI控制器。 @@ -143,34 +95,12 @@ DevHandle HdmiOpen(int16_t number); - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

number

-

HDMI控制器号

-

返回值

-

返回值描述

-

NULL

-

打开HDMI控制器失败

-

控制器句柄

-

打开的HDMI控制器句柄

-
+| 参数 | 参数描述 | +| ---------- | -------------------- | +| number | HDMI控制器号 | +| **返回值** | **返回值描述** | +| NULL | 打开HDMI控制器失败 | +| 控制器句柄 | 打开的HDMI控制器句柄 | 假设系统中存在2个HDMI控制器,编号从0到1,那么我们现在获取0号控制器: @@ -185,7 +115,7 @@ if (hdmiHandle == NULL) { } ``` -### 注册热插拔检测回调函数 +#### 注册热插拔检测回调函数 ```c int32_t HdmiRegisterHpdCallbackFunc(DevHandle handle, struct HdmiHpdCallbackInfo *callback); @@ -195,39 +125,13 @@ int32_t HdmiRegisterHpdCallbackFunc(DevHandle handle, struct HdmiHpdCallbackInfo - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

callback

-

热插拔回调函数信息

-

返回值

-

返回值描述

-

0

-

注册成功

-

负数

-

注册失败

-
+| 参数 | 参数描述 | +| ---------- | ------------------ | +| handle | HDMI控制器句柄 | +| callback | 热插拔回调函数信息 | +| **返回值** | **返回值描述** | +| 0 | 注册成功 | +| 负数 | 注册失败 | 注册热插拔检测回调函数示例: @@ -236,30 +140,31 @@ int32_t HdmiRegisterHpdCallbackFunc(DevHandle handle, struct HdmiHpdCallbackInfo static void HdmiHpdHandle(void *data, bool hpd) { if (data == NULL) { - HDF_LOGE("priv data is NULL"); - return; -} - + HDF_LOGE("priv data is NULL"); + return; + } if (hpd == true) { HDF_LOGD("HdmiHpdHandle: hot plug"); /* 调用者添加相关处理 */ } else { - HDF_LOGD("HdmiHpdHandle: hot unplog"); + HDF_LOGD("HdmiHpdHandle: hot unplug"); /* 调用者添加相关处理 */ } } - /* 热插拔检测回调函数注册示例 */ - struct HdmiHpdCallbackInfo info = {0}; - info.data = handle; - info.callbackFunc = HdmiHpdHandle; - ret = HdmiRegisterHpdCallbackFunc(hdmiHandle, info); - if (ret != 0) { - HDF_LOGE("HdmiRegisterHpdCallbackFunc: Register failed."); - } +/* 热插拔检测回调函数注册示例 */ +··· +struct HdmiHpdCallbackInfo info = {0}; +info.data = handle; +info.callbackFunc = HdmiHpdHandle; +ret = HdmiRegisterHpdCallbackFunc(hdmiHandle, info); +if (ret != 0) { + HDF_LOGE("HdmiRegisterHpdCallbackFunc: Register failed."); +} +··· ``` -### 读取EDID +#### 读取EDID ```c int32_t HdmiReadSinkEdid(DevHandle handle, uint8_t *buffer, uint32_t len); @@ -269,44 +174,14 @@ int32_t HdmiReadSinkEdid(DevHandle handle, uint8_t *buffer, uint32_t len); - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

buffer

-

数据缓冲区

-

len

-

数据长度

-

返回值

-

返回值描述

-

正整数

-

成功读取的原始EDID数据

-

负数或0

-

读取失败

-
+| 参数 | 参数描述 | +| ---------- | ---------------------- | +| handle | HDMI控制器句柄 | +| buffer | 数据缓冲区 | +| len | 数据长度 | +| **返回值** | **返回值描述** | +| 正整数 | 成功读取的原始EDID数据 | +| 负数或0 | 读取失败 | 读取Sink端的原始EDID数据示例: @@ -320,8 +195,6 @@ if (len <= 0) { } ``` -### 设置音频、视频及HDR属性 - #### 设置音频属性 ```c @@ -332,39 +205,13 @@ int32_t HdmiSetAudioAttribute(DevHandle handle, struct HdmiAudioAttr *attr); - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

attr

-

音频属性

-

返回值

-

返回值描述

-

0

-

设置成功

-

负数

-

设置失败

-
+| 参数 | 参数描述 | +| ------ | -------------- | +| handle | HDMI控制器句柄 | +| attr | 音频属性 | +| 返回值 | 返回值描述 | +| 0 | 设置成功 | +| 负数 | 设置失败 | 设置音频属性示例: @@ -393,39 +240,13 @@ int32_t HdmiSetVideoAttribute(DevHandle handle, struct HdmiVideoAttr *attr); - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

attr

-

视频属性

-

返回值

-

返回值描述

-

0

-

设置成功

-

负数

-

设置失败

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | HDMI控制器句柄 | +| attr | 视频属性 | +| **返回值** | **返回值描述** | +| 0 | 设置成功 | +| 负数 | 设置失败 | 设置视频属性示例: @@ -453,39 +274,13 @@ int32_t HdmiSetHdrAttribute(DevHandle handle, struct HdmiHdrAttr *attr); - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

attr

-

HDR属性

-

返回值

-

返回值描述

-

0

-

设置成功

-

负数

-

设置失败

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | HDMI控制器句柄 | +| attr | HDR属性 | +| **返回值** | **返回值描述** | +| 0 | 设置成功 | +| 负数 | 设置失败 | 设置HDR属性示例: @@ -504,8 +299,6 @@ if (ret != 0) { } ``` -### 其他可选设置 - #### 设置HDMI声音图像消隐 ```c @@ -516,39 +309,13 @@ int32_t HdmiAvmuteSet(DevHandle handle, bool enable); - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

enable

-

使能/去使能avmute

-

返回值

-

返回值描述

-

0

-

设置成功

-

负数

-

设置失败

-
+| 参数 | 参数描述 | +| ---------- | ----------------- | +| handle | HDMI控制器句柄 | +| enable | 使能/去使能avmute | +| **返回值** | **返回值描述** | +| 0 | 设置成功 | +| 负数 | 设置失败 | 设置声音图像消隐示例: @@ -571,39 +338,13 @@ int32_t HdmiDeepColorSet(DevHandle handle, enum HdmiDeepColor color); - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

color

-

色彩深度

-

返回值

-

返回值描述

-

0

-

设置成功

-

负数

-

设置失败

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | HDMI控制器句柄 | +| color | 色彩深度 | +| **返回值** | **返回值描述** | +| 0 | 设置成功 | +| 负数 | 设置失败 | 设置色彩深度示例: @@ -626,39 +367,13 @@ int32_t HdmiDeepColorGet(DevHandle handle, enum HdmiDeepColor *color); - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

color

-

色彩深度

-

返回值

-

返回值描述

-

0

-

获取成功

-

负数

-

获取失败

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | HDMI控制器句柄 | +| color | 色彩深度 | +| **返回值** | **返回值描述** | +| 0 | 获取成功 | +| 负数 | 获取失败 | 获取色彩深度示例: @@ -672,7 +387,7 @@ if (ret != 0) { } ``` -### 启动HDMI传输 +#### 启动HDMI传输 ```c int32_t HdmiStart(DevHandle handle); @@ -682,34 +397,12 @@ int32_t HdmiStart(DevHandle handle); - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

返回值

-

返回值描述

-

0

-

启动成功

-

负数

-

启动失败

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | HDMI控制器句柄 | +| **返回值** | **返回值描述** | +| 0 | 启动成功 | +| 负数 | 启动失败 | 启动HDMI传输示例: @@ -722,7 +415,7 @@ if (ret != 0) { } ``` -### 停止HDMI传输 +#### 停止HDMI传输 ```c int32_t HdmiStop(DevHandle handle); @@ -732,34 +425,12 @@ int32_t HdmiStop(DevHandle handle); - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

返回值

-

返回值描述

-

0

-

停止成功

-

负数

-

停止失败

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | HDMI控制器句柄 | +| **返回值** | **返回值描述** | +| 0 | 停止成功 | +| 负数 | 停止失败 | 停止HDMI传输示例: @@ -772,7 +443,7 @@ if (ret != 0) { } ``` -### 注销热插拔检测回调函数 +#### 注销热插拔检测回调函数 ```c int32_t HdmiUnregisterHpdCallbackFunc(DevHandle handle); @@ -782,34 +453,12 @@ int32_t HdmiUnregisterHpdCallbackFunc(DevHandle handle); - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-

返回值

-

返回值描述

-

0

-

注销成功

-

负数

-

注销失败

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | HDMI控制器句柄 | +| **返回值** | **返回值描述** | +| 0 | 注销成功 | +| 负数 | 注销失败 | 注销热插拔检测回调函数示例: @@ -822,7 +471,7 @@ if (ret != 0) { } ``` -### 关闭HDMI控制器 +#### 关闭HDMI控制器 ```c void HdmiClose(DevHandle handle); @@ -832,19 +481,9 @@ void HdmiClose(DevHandle handle); - - - - - - - - -

参数

-

参数描述

-

handle

-

HDMI控制器句柄

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | HDMI控制器句柄 | 关闭HDMI控制器示例: @@ -852,7 +491,7 @@ void HdmiClose(DevHandle handle); HdmiClose(hdmiHandle); ``` -## 使用实例 +### 使用实例 本例程以操作开发板上的HDMI设备为例,详细展示HDMI接口的完整使用流程。 @@ -882,7 +521,7 @@ static void HdmiHpdHandle(void *data, bool hpd) HDF_LOGD("HdmiHpdHandle: hot plug"); /* 调用者添加相关处理 */ } else { - HDF_LOGD("HdmiHpdHandle: hot unplog"); + HDF_LOGD("HdmiHpdHandle: hot unplug"); /* 调用者添加相关处理 */ } } diff --git a/zh-cn/device-dev/driver/driver-platform-hdmi-develop.md b/zh-cn/device-dev/driver/driver-platform-hdmi-develop.md index 408a31c422..89b0729fc8 100755 --- a/zh-cn/device-dev/driver/driver-platform-hdmi-develop.md +++ b/zh-cn/device-dev/driver/driver-platform-hdmi-develop.md @@ -1,115 +1,152 @@ # HDMI - [概述](#1) -- [开发步骤](#2) -- [开发实例](#3) + - [功能简介](#2) + - [基本概念](#3) + - [运作机制](#4) + - [约束与限制](#5) +- [开发指导](#6) + - [场景介绍](#7) + - [接口说明](#8) + - [开发步骤](#9) ## 概述 -HDMI(High-Definition Multiface Interface)是Hitachi、Panasonic、Philips、SiliconImage、Sony、Thomson、Toshiba共同发布的一款音视频传输协议,主要用于DVD、机顶盒等音视频source到TV、显示器等sink设备的传输。传输过程遵循TMDS(Transition Minimized Differential Signaling)协议。 +### 功能简介 -在HDF框架中,HDMI的接口适配模式采用独立服务模式,在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用率。 +HDMI(High-Definition Multiface Interface),即高清多媒体接口,主要用于DVD、机顶盒等音视频source到TV、显示器等sink设备的传输。 - **图 1** HDMI统一服务模式 +### 基本概念 + +HDMI(High-Definition Multiface Interface)是Hitachi、Panasonic、Philips、SiliconImage、Sony、Thomson、Toshiba共同发布的一款音视频传输协议。传输过程遵循TMDS(Transition Minimized Differential Signaling)协议。 + +- TMDS(Transition Minimized Differential signal):过渡调制差分信号,也被称为最小化传输差分信号,用于发送音频、视频及各种辅助数据。 + +- DDC(Display Data Channel):显示数据通道,发送端与接收端可利用DDC通道得知彼此的发送与接收能力,但HDMI仅需单向获知接收端(显示器)的能力。 + +- CEC(Consumer Electronics Control):消费电子控制,该功能应该能够在连接HDMI的发送设备与接收设备之间实现交互操作。 + +- FRL(Fixed Rate Link):TMDS 的架构进行讯号传输时,最高带宽可达 18Gbps,而 FRL 模式的带宽则提升到 48 Gbps。 +- HDCP(High-bandwidth Digital Content Protection):即高带宽数字内容保护技术,当用户对高清晰信号进行非法复制时,该技术会进行干扰,降低复制出来的影像的质量,从而对内容进行保护。 + + +### 运作机制 + +在HDF框架中,HDMI的接口适配模式采用独立服务模式(如[图1](#fig1)),在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用率。 + + **图 1** HDMI独立服务模式 ![image1](figures/独立服务模式结构图.png) -## 开发步骤 +### 约束与限制 + +HDMI模块当前仅支持轻量和小型系统内核(LiteOS) 。 + +## 开发指导 + +### 场景介绍 + +HDMI具有体积小,传输速率高,传输带宽宽,兼容性好,能同时传输无压缩音视频信号等优点。与传统的全模拟接口相比,HDMI不但增加了设备间接线的便捷性,还提供了一些HDMI特有的智能化功能,可用于小体积设备进行高质量音视频传输的场景。 + +### 接口说明 + +HdmiCntlrOps定义: +```c +struct HdmiCntlrOps { + void (*hardWareInit)(struct HdmiCntlr *cntlr); + void (*hardWareStatusGet)(struct HdmiCntlr *cntlr, struct HdmiHardwareStatus *status); + void (*controllerReset)(struct HdmiCntlr *cntlr); + bool (*hotPlugStateGet)(struct HdmiCntlr *cntlr); + bool (*hotPlugInterruptStateGet)(struct HdmiCntlr *cntlr); + void (*lowPowerSet)(struct HdmiCntlr *cntlr, bool enable); + void (*tmdsModeSet)(struct HdmiCntlr *cntlr, enum HdmiTmdsModeType mode); + int32_t (*tmdsConfigSet)(struct HdmiCntlr *cntlr, struct HdmiTmdsConfig mode); + void (*infoFrameEnable)(struct HdmiCntlr *cntlr, enum HdmiPacketType infoFrameType, bool enable); + int32_t (*infoFrameSend)(struct HdmiCntlr *cntlr, enum HdmiPacketType infoFrameType, uint8_t *data, uint32_t len); + int32_t (*infoFrameDataSet)(struct HdmiCntlr *cntlr, uint32_t type, uint8_t *data, uint32_t len); + int32_t (*cecMsgSend)(struct HdmiCntlr *cntlr, struct HdmiCecMsg *msg); + void (*audioPathEnable)(struct HdmiCntlr *cntlr, bool enable); + void (*audioPathSet)(struct HdmiCntlr *cntlr, struct HdmiAudioConfigInfo *config); + void (*phyOutputEnable)(struct HdmiCntlr *cntlr, bool enable); + void (*phyOutputSet)(struct HdmiCntlr *cntlr, struct HdmiPhyCfg *cfg); + void (*blackDataSet)(struct HdmiCntlr *cntlr, bool enable); + void (*videoMuteEnable)(struct HdmiCntlr *cntlr, bool enable); + void (*videoPathSet)(struct HdmiCntlr *cntlr, struct HdmiVideoAttr *attr); + void (*audioMuteEnable)(struct HdmiCntlr *cntlr, bool enable); + void (*avmuteSet)(struct HdmiCntlr *cntlr, bool enable); + int32_t (*ddcTransfer)(struct HdmiCntlr *cntlr, struct HdmiDdcCfg *ddcCfg); + bool (*scdcSourceScrambleGet)(struct HdmiCntlr *cntlr); + int32_t (*scdcSourceScrambleSet)(struct HdmiCntlr *cntlr, bool enable); + void (*frlSet)(struct HdmiCntlr *cntlr); + int32_t (*frlEnable)(struct HdmiCntlr *cntlr, bool enable); + int32_t (*audioNctsSet)(struct HdmiCntlr *cntlr, struct HdmiFrlAudioNctsConfig *cfg); + void (*frlTrainingConfigSet)(struct HdmiCntlr *cntlr, struct HdmiFrlTrainConfig *cfg); + void (*frlTrainingStart)(struct HdmiCntlr *cntlr); + void (*frlGetTriningRslt)(struct HdmiCntlr *cntlr, struct HdmiFrlTrainRslt *rslt); + void (*hdcpRegInit)(struct HdmiCntlr *cntlr); + int32_t (*hdcpGenerateAksvAndAn)(struct HdmiCntlr *cntlr); + int32_t (*hdcpOptReg)(struct HdmiCntlr *cntlr, enum HdmiHdcpRegOptType type, uint8_t *data, uint32_t len); + void (*hdrTimerSet)(struct HdmiCntlr *cntlr, struct HdmiHdrTimerConfig *config); +}; +``` + +**表1** HdmiCntlrOps结构体成员的回调函数功能说明 + +| 函数成员 | 入参 | 出参 | 返回值 | 功能 | +| ------------------------ | ------------------------------------------------------------ | -------------------------------------- | ------------------ | -------------------------------------------------- | +| hardWareInit | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | 无 | 初始化HDMI硬件 | +| hardWareStatusGet | **cntlr**: 结构体指针,核心层HDMI控制器;
| **status**:HDMI硬件状态 ; | 无 | 获取HDMI当前硬件状态 | +| controllerReset | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | 无 | 复位HDMI控制器 | +| hotPlugStateGet | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | bool: HDMI热插拔状态 | 获取HDMI热插拔状态 | +| hotPlugInterruptStateGet | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | bool: HDMI热插拔中断状态 | 获取HDMI热插拔中断状态 | +| lowPowerSet | **cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能 | 无 | 无 | 使能/去使能低功耗 | +| tmdsModeSet | **cntlr**: 结构体指针,核心层HDMI控制器;
**mode**:TMDS模式 | 无 | 无 | 设置TMDS模式 | +|tmdsConfigSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**mode**: TMDS参数|无|HDF_STATUS相关状态|配置TMDS参数| +|infoFrameEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**infoFrameType**: packet类型
**enable**: bool,使能/去使能|无|无|使能/去使能infoFrame| +|infoFrameSend|**cntlr**: 结构体指针,核心层HDMI控制器;
**infoFrameType**: packet类型
**data**: infoFrame数据
**len**:数据长度|无|HDF_STATUS相关状态|发送inforFrame| +|cecMsgSend|**cntlr**: 结构体指针,核心层HDMI控制器;
**msg**: CEC消息|无|HDF_STATUS相关状态|发送CEC消息| +|audioPathEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能audio通路| +|audioPathSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**config**: 配置信息|无|无|设置audio通路配置信息| +|phyOutputEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能物理层输出状态| +|phyOutputSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**: 配置信息|无|无|设置物理层配置信息| +|blackDataSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|设置黑屏| +|videoMuteEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能video静音| +|videoPathSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**attr**: 配置信息|无|无|设置viedo通路配置信息| +|audioMuteEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能audio静音| +|avmuteSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能声音图像消隐| +|ddcTransfer|**cntlr**: 结构体指针,核心层HDMI控制器;
**ddcCfg**:DDC配置参数|**ddcCfg**:DDC配置参数|HDF_STATUS相关状态|读写DDC数据| +|scdcSourceScrambleGet|**cntlr**: 结构体指针,核心层HDMI控制器;|无|bool,加扰状态|获取source端的加扰状态| +|scdcSourceScrambleSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|HDF_STATUS相关状态|使能/去使能source端的加扰| +|frlEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|HDF_STATUS相关状态|使能/去使能FRL| +|audioNctsSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**:N/CTS配 置参数|无|HDF_STATUS相关状态|设置audio的N/CTS信息| +|frlTrainingConfigSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**:FRL Traning配置参数|无|无|设置FRL Traning配置信息| +|frlTrainingStart|**cntlr**: 结构体指针,核心层HDMI控制器;|无|无|开始FRL Traning流程| +|frlGetTriningRslt|**cntlr**: 结构体指针,核心层HDMI控制器;|**rslt**:FRL Traning结果|无|获取FRL Traning结果| +|hdcpRegInit|**cntlr**: 结构体指针,核心层HDMI控制器;|无|无|初始化HDCP流程相关的寄存器| +|hdcpGenerateAksvAndAn|**cntlr**: 结构体指针,核心层HDMI控制器;|无|HDF_STATUS相关状态|HDCP流程中生成aksv和an| +|hdcpOptReg|**cntlr**: 结构体指针,核心层HDMI控制器;
**type**: 操作类型
**data**: 寄存器数据
**len**: 数据长度|**data**: 寄存器数据|HDF_STATUS相关状态|HDCP流程中读写相关寄存器| +|hdrTimerSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**config**: timer配置信息|无|无|设置HDR相关的timer配置信息| + + +### 开发步骤 HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以及实例化HDMI控制器对象。 -1. **实例化驱动入口:** +- **实例化驱动入口:** - 实例化HdfDriverEntry结构体成员。 - 调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。 -2. **配置属性文件:** +- **配置属性文件:** - 在device_info.hcs文件中添加deviceNode描述。 - 【可选】添加hdmi_config.hcs器件属性文件。 -3. **实例化HDMI控制器对象:** +- **实例化HDMI控制器对象:** - 初始化HdmiCntlr成员。 - - 实例化HdmiCntlr成员HdmiCntlrOps方法集合,其定义和成员函数说明见下文。 + - 实例化HdmiCntlr成员HdmiCntlrOps方法集合。 - HdmiCntlrOps定义: - ```c - struct HdmiCntlrOps { - void (*hardWareInit)(struct HdmiCntlr *cntlr); - void (*hardWareStatusGet)(struct HdmiCntlr *cntlr, struct HdmiHardwareStatus *status); - void (*controllerReset)(struct HdmiCntlr *cntlr); - bool (*hotPlugStateGet)(struct HdmiCntlr *cntlr); - bool (*hotPlugInterruptStateGet)(struct HdmiCntlr *cntlr); - void (*lowPowerSet)(struct HdmiCntlr *cntlr, bool enable); - void (*tmdsModeSet)(struct HdmiCntlr *cntlr, enum HdmiTmdsModeType mode); - int32_t (*tmdsConfigSet)(struct HdmiCntlr *cntlr, struct HdmiTmdsConfig mode); - void (*infoFrameEnable)(struct HdmiCntlr *cntlr, enum HdmiPacketType infoFrameType, bool enable); - int32_t (*infoFrameSend)(struct HdmiCntlr *cntlr, enum HdmiPacketType infoFrameType, uint8_t *data, uint32_t len); - int32_t (*infoFrameDataSet)(struct HdmiCntlr *cntlr, uint32_t type, uint8_t *data, uint32_t len); - int32_t (*cecMsgSend)(struct HdmiCntlr *cntlr, struct HdmiCecMsg *msg); - void (*audioPathEnable)(struct HdmiCntlr *cntlr, bool enable); - void (*audioPathSet)(struct HdmiCntlr *cntlr, struct HdmiAudioConfigInfo *config); - void (*phyOutputEnable)(struct HdmiCntlr *cntlr, bool enable); - void (*phyOutputSet)(struct HdmiCntlr *cntlr, struct HdmiPhyCfg *cfg); - void (*blackDataSet)(struct HdmiCntlr *cntlr, bool enable); - void (*videoMuteEnable)(struct HdmiCntlr *cntlr, bool enable); - void (*videoPathSet)(struct HdmiCntlr *cntlr, struct HdmiVideoAttr *attr); - void (*audioMuteEnable)(struct HdmiCntlr *cntlr, bool enable); - void (*avmuteSet)(struct HdmiCntlr *cntlr, bool enable); - int32_t (*ddcTransfer)(struct HdmiCntlr *cntlr, struct HdmiDdcCfg *ddcCfg); - bool (*scdcSourceScrambleGet)(struct HdmiCntlr *cntlr); - int32_t (*scdcSourceScrambleSet)(struct HdmiCntlr *cntlr, bool enable); - void (*frlSet)(struct HdmiCntlr *cntlr); - int32_t (*frlEnable)(struct HdmiCntlr *cntlr, bool enable); - int32_t (*audioNctsSet)(struct HdmiCntlr *cntlr, struct HdmiFrlAudioNctsConfig *cfg); - void (*frlTrainingConfigSet)(struct HdmiCntlr *cntlr, struct HdmiFrlTrainConfig *cfg); - void (*frlTrainingStart)(struct HdmiCntlr *cntlr); - void (*frlGetTriningRslt)(struct HdmiCntlr *cntlr, struct HdmiFrlTrainRslt *rslt); - void (*hdcpRegInit)(struct HdmiCntlr *cntlr); - int32_t (*hdcpGenerateAksvAndAn)(struct HdmiCntlr *cntlr); - int32_t (*hdcpOptReg)(struct HdmiCntlr *cntlr, enum HdmiHdcpRegOptType type, uint8_t *data, uint32_t len); - void (*hdrTimerSet)(struct HdmiCntlr *cntlr, struct HdmiHdrTimerConfig *config); - }; - ``` +1. **实例化驱动入口** - 表1 HdmiCntlrOps结构体成员的回调函数功能说明 - - | 函数成员 | 入参 | 出参 | 返回值 | 功能 | - | ------------------------ | ------------------------------------------------------------ | -------------------------------------- | ------------------ | -------------------------------------------------- | - | hardWareInit | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | 无 | HDMI硬件初始化 | - | hardWareStatusGet | **cntlr**: 结构体指针,核心层HDMI控制器;
| **status**:HDMI硬件状态 ; | 无 | 获取HDMI当前硬件状态 | - | controllerReset | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | 无 | HDMI控制器复位 | - | hotPlugStateGet | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | bool: HDMI热插拔状态 | 获取HDMI热插拔状态 | - | hotPlugInterruptStateGet | **cntlr**: 结构体指针,核心层HDMI控制器; | 无 | bool: HDMI热插拔中断状态 | 获取HDMI热插拔中断状态 | - | lowPowerSet | **cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能 | 无 | 无 | 使能/去使能低功耗 | - | tmdsModeSet | **cntlr**: 结构体指针,核心层HDMI控制器;
**mode**:TMDS模式 | 无 | 无 | 设置TMDS模式 | - |tmdsConfigSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**mode**: TMDS参数|无|HDF_STATUS相关状态|配置TMDS参数| - |infoFrameEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**infoFrameType**: packet类型
**enable**: bool,使能/去使能|无|无|使能/去使能infoFrame| - |infoFrameSend|**cntlr**: 结构体指针,核心层HDMI控制器;
**infoFrameType**: packet类型
**data**: infoFrame数据
**len**:数据长度|无|HDF_STATUS相关状态|发送inforFrame| - |cecMsgSend|**cntlr**: 结构体指针,核心层HDMI控制器;
**msg**: CEC消息|无|HDF_STATUS相关状态|发送CEC消息| - |audioPathEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能audio通路| - |audioPathSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**config**: 配置信息|无|无|设置audio通路配置信息| - |phyOutputEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能物理层输出状态| - |phyOutputSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**: 配置信息|无|无|设置物理层配置信息| - |blackDataSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|黑屏设置| - |videoMuteEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能video静音| - |videoPathSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**attr**: 配置信息|无|无|设置viedo通路配置信息| - |audioMuteEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能audio静音| - |avmuteSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|无|使能/去使能声音图像消隐| - |ddcTransfer|**cntlr**: 结构体指针,核心层HDMI控制器;
**ddcCfg**:DDC配置参数|**ddcCfg**:DDC配置参数|HDF_STATUS相关状态|DDC读写数据| - |scdcSourceScrambleGet|**cntlr**: 结构体指针,核心层HDMI控制器;|无|bool,加扰状态|获取source端的加扰状态| - |scdcSourceScrambleSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|HDF_STATUS相关状态|使能/去使能source端的加扰| - |frlEnable|**cntlr**: 结构体指针,核心层HDMI控制器;
**enable**: bool,使能/去使能|无|HDF_STATUS相关状态|使能/去使能FRL| - |audioNctsSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**:N/CTS配 置参数|无|HDF_STATUS相关状态|设置audio的N/CTS信息| - |frlTrainingConfigSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**cfg**:FRL Traning配置参数|无|无|设置FRL Traning配置信息| - |frlTrainingStart|**cntlr**: 结构体指针,核心层HDMI控制器;|无|无|开始FRL Traning流程| - |frlGetTriningRslt|**cntlr**: 结构体指针,核心层HDMI控制器;|**rslt**:FRL Traning结果|无|获取FRL Traning结果| - |hdcpRegInit|**cntlr**: 结构体指针,核心层HDMI控制器;|无|无|初始化HDCP流程相关的寄存器| - |hdcpGenerateAksvAndAn|**cntlr**: 结构体指针,核心层HDMI控制器;|无|HDF_STATUS相关状态|HDCP流程中生成aksv和an| - |hdcpOptReg|**cntlr**: 结构体指针,核心层HDMI控制器;
**type**: 操作类型
**data**: 寄存器数据
**len**: 数据长度|**data**: 寄存器数据|HDF_STATUS相关状态|HDCP流程中的相关寄存器读写操作| - |hdrTimerSet|**cntlr**: 结构体指针,核心层HDMI控制器;
**config**: timer配置信息|无|无|设置HDR相关的timer配置信息| - -## 开发实例 - -1. 驱动开发首先需要实例化驱动入口,驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。 + 驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。 一般在加载驱动时HDF会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。 @@ -126,7 +163,9 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以 HDF_INIT(g_hdmiDriverEntry); //调用HDF_INIT将驱动入口注册到HDF框架中 ``` -2. 完成驱动入口注册之后,下一步请在device_info.hcs文件中添加deviceNode信息,并在hdmi_config.hcs中配置器件属性。deviceNode信息与驱动入口注册相关,器件属性值对于厂商驱动的实现以及核心层HdmiCntlr相关成员的默认值或限制范围有密切关系。 +2. **配置属性文件** + + 完成驱动入口注册之后,下一步请在device_info.hcs文件中添加deviceNode信息,并在hdmi_config.hcs中配置器件属性。deviceNode信息与驱动入口注册相关,器件属性值对于厂商驱动的实现以及核心层HdmiCntlr相关成员的默认值或限制范围有密切关系。 从第一个节点开始配置具体HDMI控制器信息,此节点并不表示某一路HDMI控制器,而是代表一个资源性质设备,用于描述一类HDMI控制器的信息。本例只有一个HDMI控制器,如有多个控制器,则需要在device_info文件增加deviceNode信息,以及在hdmi_config文件中增加对应的器件属性。 @@ -198,10 +237,12 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以 } ``` -3. 最后一步,完成驱动入口注册之后,要以核心层HdmiCntlr对象的初始化为核心,包括厂商自定义结构体(传递参数和数据),实例化HdmiCntlr成员HdmiCntlrOps(让用户可以通过接口来调用驱动底层函数),实现HdfDriverEntry成员函数(Bind,Init,Release)。 - +3. **实例化控制器对象** + + 最后一步,完成驱动入口注册之后,要以核心层HdmiCntlr对象的初始化为核心,包括厂商自定义结构体(传递参数和数据),实例化HdmiCntlr成员HdmiCntlrOps(让用户可以通过接口来调用驱动底层函数),实现HdfDriverEntry成员函数(Bind,Init,Release)。 + - 自定义结构体参考 - + > ![](../public_sys-resources/icon-note.gif) **说明:** > 从驱动角度看,自定义结构体是参数和数据的载体。HDF会读取hdmi_config.hcs文件中的数值并通过DeviceResourceIface来初始化结构体成员,且其中一些重要数值(例如设备号、总线号等)也会被传递给核心层HdmiCntlr对象。 @@ -213,7 +254,7 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以 uint32_t regSize; //【必要】寄存器位宽 uint32_t irqNum; //【必要】中断号 }; - + /* HdmiCntlr是核心层控制器结构体,其中的成员在Init函数中被赋值 */ struct HdmiCntlr { struct IDeviceIoService service; @@ -240,7 +281,7 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以 }; ``` - - **【重要】** HdmiCntlr成员回调函数结构体HdmiCntlrOps的实例化 + - HdmiCntlr成员回调函数结构体HdmiCntlrOps的实例化 ```c static struct HdmiCntlrOps g_hdmiAdapterHostOps = { @@ -280,15 +321,15 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以 .hdrTimerSet = HdmiAdapterHdrTimerSet, }; ``` - - - **Bind函数参考** - - > **入参:** - > HdfDeviceObject 是整个驱动对外呈现的接口参数,具备 HCS 配置文件的信息 - > - > **返回值:** - > HDF_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义) - + + - Bind函数参考 + + **入参:** + HdfDeviceObject 是整个驱动对外呈现的接口参数,具备 HCS 配置文件的信息 + + **返回值:** + HDF_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义) + |状态(值)|状态描述| |:-|:-| |HDF_ERR_INVALID_OBJECT|控制器对象非法| @@ -297,12 +338,12 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以 |HDF_ERR_IO |I/O 错误| |HDF_SUCCESS |传输成功| |HDF_FAILURE |传输失败| - - > **函数说明:** - > 初始化自定义结构体对象HdmiAdapterHost,初始化HdmiCntlr成员,调用核心层HdmiCntlrAdd函数。 - > - > HdmiCntlr,HdmiAdapterHost,HdfDeviceObject之间互相赋值,方便其他函数可以相互转化。 - + + **函数说明:** + 初始化自定义结构体对象HdmiAdapterHost,初始化HdmiCntlr成员,调用核心层HdmiCntlrAdd函数。 + + HdmiCntlr,HdmiAdapterHost,HdfDeviceObject之间互相赋值,方便其他函数可以相互转化。 + ```c static int32_t HdmiAdapterBind(struct HdfDeviceObject *obj) { @@ -339,37 +380,37 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以 return ret; } ``` - - - **init函数参考** - - >**入参:** - >HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 - > - >**返回值:** - >HDF_STATUS相关状态 - > - >函数说明: - > - >实现HdmiAdapterInit函数。 - + + - Init函数参考 + + **入参:** + HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 + + **返回值:** + HDF_STATUS相关状态 + + **函数说明**: + + 实现HdmiAdapterInit函数。 + ```c static int32_t HdmiAdapterInit(struct HdfDeviceObject *obj) { return HDF_SUCCESS; } ``` - - - **Release 函数参考** - - > **入参:** - > HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 - > - > **返回值:** - > 无 - > - > **函数说明:** - > 释放内存和删除控制器,该函数需要在驱动入口结构体中赋值给 Release 接口, 当HDF框架调用Init函数初始化驱动失败时,可以调用 Release 释放驱动资源。 - + + - Release 函数参考 + + **入参:** + HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 + + **返回值:** + 无 + + **函数说明:** + 释放内存和删除控制器,该函数需要在驱动入口结构体中赋值给 Release 接口, 当HDF框架调用Init函数初始化驱动失败时,可以调用 Release 释放驱动资源。 + ```c static void HdmiAdapterRelease(struct HdfDeviceObject *obj) { @@ -380,4 +421,7 @@ HDMI模块适配的三个环节是配置属性文件,实例化驱动入口以 HimciDeleteHost((struct HimciAdapterHost *)cntlr->priv);//厂商自定义的内存释放函数,这里有HdmiCntlr到HimciAdapterHost的强制转化 } ``` - > 所有强制转换获取相应对象的操作**前提**是在Init函数中具备对应赋值的操作。 + + > ![](../public_sys-resources/icon-note.gif) **说明:** + > 所有强制转换获取相应对象的操作前提是在Init函数中具备对应赋值的操作。 + diff --git a/zh-cn/device-dev/driver/driver-platform-i3c-des.md b/zh-cn/device-dev/driver/driver-platform-i3c-des.md index b200009148..7e40317218 100755 --- a/zh-cn/device-dev/driver/driver-platform-i3c-des.md +++ b/zh-cn/device-dev/driver/driver-platform-i3c-des.md @@ -1,108 +1,90 @@ # I3C - [概述](#section1) -- [接口说明](#section2) -- [使用指导](#section3) - - [使用流程](#section4) - - [打开I3C控制器](#section5) - - [进行I3C通信](#section6) - - [获取I3C控制器配置](#section7) - - [配置I3C控制器](#section8) - - [请求IBI(带内中断)](#section9) - - [释放IBI(带内中断)](#section10) - - [关闭I3C控制器](#section11) - -- [使用实例](#section12) + - [功能简介](#section2) + - [基本概念](#section3) + - [运作机制](#section4) + - [约束与限制](#section5) +- [使用指导](#section6) + - [场景介绍](#section7) + - [接口说明](#section8) + - [开发步骤](#section9) + - [使用实例](#section10) ## 概述 -- I3C(Improved Inter Integrated Circuit)总线是由MIPI Alliance开发的一种简单、低成本的双向二线制同步串行总线。 -- I3C总线向下兼容传统的I2C设备,同时增加了带内中断(In-Bind Interrupt)功能,支持I3C设备进行热接入操作,弥补了I2C总线需要额外增加中断线来完成中断的不足。 +### 功能简介 + +I3C(Improved Inter Integrated Circuit)总线是由MIPI Alliance开发的一种简单、低成本的双向二线制同步串行总线。 + +- I3C接口定义了完成I3C传输的通用方法集合,包括: + I3C控制器管理:打开或关闭I3C控制器。 + I3C控制器配置:获取或配置I3C控制器参数。 + I3C消息传输:通过消息传输结构体数组进行自定义传输。 + I3C带内中断:请求或释放带内中断。 + +### 基本概念 + +- I3C是两线双向串行总线,针对多个传感器从设备进行了优化,并且一次只能由一个I3C主设备控制。 相比于I2C,I3C总线拥有更高的速度、更低的功耗,支持带内中断、从设备热接入以及切换当前主设备,同时向后兼容I2C从设备。 +- I3C增加了带内中断(In-Bind Interrupt)功能,支持I3C设备进行热接入操作,弥补了I2C总线需要额外增加中断线来完成中断的不足。 - I3C总线上允许同时存在I2C设备、I3C从设备和I3C次级主设备。 -- I3C接口定义了完成I3C传输的通用方法集合,包括: +- I3C相关缩略词解释: + - IBI(In-Band Interrupt):带内中断。在SCL线没有启动信号时,I3C从设备可以通过拉低SDA线使主设备发出SCL启动信号,从而发出带内中断请求。若有多个从机同时发出中断请求,I3C主机则通过从机地址进行仲裁,低地址优先相应。 + - DAA(Dynamic Address Assignment):动态地址分配。I3C支持对从设备地址进行动态分配从而避免地址冲突。在分配动态地址之前,连接到I3C总线上的每个I3C设备都应以两种方式之一来唯一标识: + 1)设备可能有一个符合I2C规范的静态地址,主机可以使用此静态地址; + 2)在任何情况下,设备均应具有48位的临时ID。 除非设备具有静态地址且主机使用静态地址,否则主机应使用此48位临时ID。 + - CCC(Common Command Code) :通用命令代码,所有I3C设备均支持CCC,可以直接将其传输到特定的I3C从设备,也可以同时传输到所有I3C从设备。 + - BCR(Bus Characteristic Register):总线特性寄存器,每个连接到 I3C 总线的 I3C 设备都应具有相关的只读总线特性寄存器 (BCR),该寄存器描述了I3C兼容设备在动态地址分配和通用命令代码中的作用和功能。 + - DCR(Device Characteristic Register):设备特性寄存器,连接到 I3C 总线的每个 I3C 设备都应具有相关的只读设备特性寄存器 (DCR)。 该寄存器描述了用于动态地址分配和通用命令代码的 I3C 兼容设备类型(例如,加速度计、陀螺仪等)。 - - I3C控制器管理:打开或关闭I3C控制器。 - - I3C控制器配置:获取或配置I3C控制器参数。 - - I3C消息传输:通过消息传输结构体数组进行自定义传输。 - - I3C带内中断:请求或释放带内中断。 - - I3C的物理连接如[图1](#fig1)所示: - **图 1** I3C物理连线示意图 - ![](figures/I3C物理连线示意图.png "I3C物理连线示意图") +### 运作机制 -## 接口说明 +在HDF框架中,I3C模块接口适配模式采用统一服务模式,这需要一个设备服务来作为I3C模块的管理器,统一处理外部访问,这会在配置文件中有所体现。统一服务模式适合于同类型设备对象较多的情况,如I3C可能同时具备十几个控制器,采用独立服务模式需要配置更多的设备节点,且服务会占据内存资源。 -**表 1** I3C驱动API接口功能介绍 + 相比于I2C,I3C总线拥有更高的速度、更低的功耗,支持带内中断、从设备热接入以及切换当前主设备,同时向后兼容I2C从设备。一路I3C总线上,可以连接多个设备,这些设备可以是I2C从设备、I3C从设备和I3C次级主设备,但只能同时存在一个主设备,一般为控制器本身。 - +**图 1** I3C物理连线示意图 +![](figures/I3C物理连线示意图.png "I3C物理连线示意图") + +### 约束与限制 + +I3C模块当前仅支持轻量和小型系统内核(LiteOS) 。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

功能分类

-

接口名

-

描述

-

I3C控制器管理接口

-

I3cOpen

-
打开I3C控制器

-

I3cClose

-

关闭I3C控制器

-

I3c消息传输接口

-

I3cTransfer

-

自定义传输

-

I3C控制器配置接口

-

I3cSetConfig

-
配置I3C控制器

-

I3cGetConfig

-

获取I3C控制器配置

-

I3C带内中断接口

-

I3cRequestIbi

-
请求带内中断

-

I3cFreeIbi

-

释放带内中断

-
+## 使用指导 +### 场景介绍 +I3C可连接单个或多个I3C、I2C从器件,它主要用于: +1. 与传感器通信,如陀螺仪、气压计或支持I3C协议的图像传感器等; +2. 通过软件或硬件协议转换,与其他接口(如 UART 串口等)的设备进行通信。 + +### 接口说明 + +**表 1** I3C驱动API接口功能介绍 + + + +| 接口名 | 描述 | +| ------------- | ----------------- | +| I3cOpen | 打开I3C控制器 | +| I3cClose | 关闭I3C控制器 | +| I3cTransfer | 自定义传输 | +| I3cSetConfig | 配置I3C控制器 | +| I3cGetConfig | 获取I3C控制器配置 | +| I3cRequestIbi | 请求带内中断 | +| I3cFreeIbi | 释放带内中断 | >![](../public_sys-resources/icon-note.gif) **说明:** >本文涉及的所有接口,仅限内核态使用,不支持在用户态使用。 -## 使用指导 - -### 使用流程 +### 开发步骤 I3C的使用流程如[图2](#fig2)所示。 **图 2** I3C使用流程图 ![](figures/I3C使用流程图.png "I3C使用流程图") -### 打开I3C控制器 +#### 打开I3C控制器 在进行I3C通信前,首先要调用I3cOpen打开I3C控制器。 ```c @@ -113,34 +95,12 @@ DevHandle I3cOpen(int16_t number); - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

number

-

I3C控制器号

-

返回值

-

返回值描述

-

NULL

-

打开I3C控制器失败

-

控制器句柄

-

打开的I3C控制器句柄

-
+| 参数 | 参数描述 | +| ---------- | ------------------- | +| number | I3C控制器号 | +| **返回值** | **返回值描述** | +| NULL | 打开I3C控制器失败 | +| 控制器句柄 | 打开的I3C控制器句柄 | 假设系统中存在8个I3C控制器,编号从0到7,那么我们现在打开1号控制器: @@ -155,7 +115,7 @@ if (i3cHandle == NULL) { } ``` -### 进行I3C通信 +#### 进行I3C通信 消息传输 ```c @@ -166,49 +126,15 @@ int32_t I3cTransfer(DevHandle handle, struct I3cMsg *msgs, int16_t count, enum T - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

I3C控制器句柄

-

msgs

-

待传输数据的消息结构体数组

-

count

-

消息数组长度

-

mode

-

传输模式,0:I2C模式;1:I3C模式;2:发送CCC(Common Command Code)

-

返回值

-

返回值描述

-

正整数

-

成功传输的消息结构体数目

-

负数

-

执行失败

-
+| 参数 | 参数描述 | +| ---------- | -------------------------------------------- | +| handle | I3C控制器句柄 | +| msgs | 待传输数据的消息结构体数组 | +| count | 消息数组长度 | +| mode | 传输模式,0:I2C模式;1:I3C模式;2:发送CCC | +| **返回值** | **返回值描述** | +| 正整数 | 成功传输的消息结构体数目 | +| 负数 | 执行失败 | I3C传输消息类型为I3cMsg,每个传输消息结构体表示一次读或写,通过一个消息数组,可以执行若干次的读写组合操作。 @@ -239,7 +165,7 @@ if (ret != 2) { >- 本函数不对每个消息结构体中的数据长度做限制,同样由具体I3C控制器决定。 >- 本函数可能会引起系统休眠,禁止在中断上下文调用。 -### 获取I3C控制器配置 +#### 获取I3C控制器配置 ```c int32_t I3cGetConfig(DevHandle handle, struct I3cConfig *config); @@ -249,41 +175,27 @@ int32_t I3cGetConfig(DevHandle handle, struct I3cConfig *config); - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

I3C控制器句柄

-

config

-

I3C控制器配置

-

返回值

-

返回值描述

-

0

-

获取成功

-

负数

-

获取失败

-
- -### 配置I3C控制器 +| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | I3C控制器句柄 | +| config | I3C控制器配置 | +| **返回值** | **返回值描述** | +| 0 | 获取成功 | +| 负数 | 获取失败 | + +获取I3C控制器配置示例: + +```c +struct I3cConfig config; + +ret = I3cGetConfig(i3cHandle, &config); +if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Get config fail!", __func__); + return HDF_FAILURE; +} +``` + +#### 配置I3C控制器 ```c int32_t I3cSetConfig(DevHandle handle, struct I3cConfig *config); @@ -293,41 +205,29 @@ int32_t I3cSetConfig(DevHandle handle, struct I3cConfig *config); - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

I3C控制器句柄

-

config

-

I3C控制器配置

-

返回值

-

返回值描述

-

0

-

配置成功

-

负数

-

配置失败

-
- -### 请求IBI(带内中断) +| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | I3C控制器句柄 | +| config | I3C控制器配置 | +| **返回值** | **返回值描述** | +| 0 | 配置成功 | +| 负数 | 配置失败 | + +配置I3C控制器示例: + +```c +struct I3cConfig config; + +config->busMode = I3C_BUS_HDR_MODE; +config->curMaster = NULL; +ret = I3cSetConfig(i3cHandle, &config); +if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Set config fail!", __func__); + return HDF_FAILURE; +} +``` + +#### 请求IBI(带内中断) ```c int32_t I3cRequestIbi(DevHandle handle, uint16_t addr, I3cIbiFunc func, uint32_t payload); @@ -337,49 +237,17 @@ int32_t I3cRequestIbi(DevHandle handle, uint16_t addr, I3cIbiFunc func, uint32_t - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

I3C控制器设备句柄

-

addr

-

I3C设备地址

-

func

-

IBI回调函数

-

payload

-

IBI有效载荷

-

返回值

-

返回值描述

-

0

-

请求成功

-

负数

-

请求失败

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | I3C控制器句柄 | +| addr | I3C设备地址 | +| func | IBI回调函数 | +| payload | IBI有效载荷 | +| **返回值** | **返回值描述** | +| 0 | 请求成功 | +| 负数 | 请求失败 | + +请求带内中断示例: ```c static int32_t TestI3cIbiFunc(DevHandle handle, uint16_t addr, struct I3cIbiData data) @@ -415,7 +283,7 @@ int32_t I3cTestRequestIbi(void) } ``` -### 释放IBI(带内中断) +#### 释放IBI(带内中断) ```c int32_t I3cFreeIbi(DevHandle handle, uint16_t addr); @@ -425,45 +293,21 @@ int32_t I3cFreeIbi(DevHandle handle, uint16_t addr); - - - - - - - - - - - - - - - - - - - - -

参数

-

参数描述

-

handle

-

I3C控制器设备句柄

-

addr

-

I3C设备地址

-

返回值

-

返回值描述

-

0

-

释放成功

-

负数

-

释放失败

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | I3C控制器句柄 | +| addr | I3C设备地址 | +| **返回值** | **返回值描述** | +| 0 | 释放成功 | +| 负数 | 释放失败 | + +释放带内中断示例: ```c I3cFreeIbi(i3cHandle, 0x3F); /* 释放带内中断 */ ``` -### 关闭I3C控制器 +#### 关闭I3C控制器 I3C通信完成之后,需要关闭I3C控制器,关闭函数如下所示: ```c @@ -474,26 +318,17 @@ void I3cClose(DevHandle handle); - - - - - - - - -

参数

-

参数描述

-

handle

-

I3C控制器设备句柄

-
+| 参数 | 参数描述 | +| ---------- | -------------- | +| handle | I3C控制器句柄 | +关闭I3C控制器实例: ```c I3cClose(i3cHandle); /* 关闭I3C控制器 */ ``` -## 使用实例 +## 使用实例 本例程以操作开发板上的I3C设备为例,详细展示I3C接口的完整使用流程。 @@ -511,7 +346,6 @@ I3cClose(i3cHandle); /* 关闭I3C控制器 */ ```c #include "i3c_if.h" /* I3C标准接口头文件 */ -#include "i3c_ccc.h" /* I3C通用命令代码头文件 */ #include "hdf_log.h" /* 标准日志打印头文件 */ #include "osal_io.h" /* 标准IO读写接口头文件 */ #include "osal_time.h" /* 标准延迟&睡眠接口头文件 */ diff --git a/zh-cn/device-dev/driver/driver-platform-i3c-develop.md b/zh-cn/device-dev/driver/driver-platform-i3c-develop.md index 3f882b3b3d..3fdf899756 100755 --- a/zh-cn/device-dev/driver/driver-platform-i3c-develop.md +++ b/zh-cn/device-dev/driver/driver-platform-i3c-develop.md @@ -1,73 +1,115 @@ # I3C - [概述](#1) -- [开发步骤](#2) -- [开发实例](#3) + - [功能简介](#2) + - [基本概念](#3) + - [运作机制](#4) + - [约束与限制](#5) +- [开发指导](#6) + - [场景介绍](#7) + - [接口说明](#8) + - [开发步骤](#9) ## 概述 -I3C(Improved Inter Integrated Circuit)总线是由MIPI Alliance开发的一种简单、低成本的双向二线制同步串行总线。在HDF框架中,I3C模块接口适配模式采用统一服务模式,这需要一个设备服务来作为I3C模块的管理器,统一处理外部访问,这会在配置文件中有所体现。统一服务模式适合于同类型设备对象较多的情况,如I3C可能同时具备十几个控制器,采用独立服务模式需要配置更多的设备节点,且服务会占据内存资源。 +### 功能简介 + +I3C(Improved Inter Integrated Circuit)总线是由MIPI Alliance开发的一种简单、低成本的双向二线制同步串行总线。 + +### 基本概念 + +I3C是两线双向串行总线,针对多个传感器从设备进行了优化,并且一次只能由一个I3C主设备控制。 相比于I2C,I3C总线拥有更高的速度、更低的功耗,支持带内中断、从设备热接入以及切换当前主设备,同时向后兼容I2C从设备。 + +- IBI(In-Band Interrupt):带内中断。在SCL线没有启动信号时,I3C从设备可以通过拉低SDA线使主设备发出SCL启动信号,从而发出带内中断请求。若有多个从机同时发出中断请求,I3C主机则通过从机地址进行仲裁,低地址优先相应。 +- DAA(Dynamic Address Assignment):动态地址分配。I3C支持对从设备地址进行动态分配从而避免地址冲突。在分配动态地址之前,连接到I3C总线上的每个I3C设备都应以两种方式之一来唯一标识: +1)设备可能有一个符合I2C规范的静态地址,主机可以使用此静态地址; +2)在任何情况下,设备均应具有48位的临时ID。 除非设备具有静态地址且主机使用静态地址,否则主机应使用此48位临时ID。 + +- CCC(Common Command Code) :通用命令代码(CCC),所有I3C设备均支持CCC,可以直接将其传输到特定的I3C从设备,也可以同时传输到所有I3C从设备。 +- BCR(Bus Characteristic Register):总线特性寄存器,每个连接到 I3C 总线的 I3C 设备都应具有相关的只读总线特性寄存器 (BCR),该寄存器描述了I3C兼容设备在动态地址分配和通用命令代码中的作用和功能。 +- DCR(Device Characteristic Register):设备特性寄存器,连接到 I3C 总线的每个 I3C 设备都应具有相关的只读设备特性寄存器 (DCR)。 该寄存器描述了用于动态地址分配和通用命令代码的 I3C 兼容设备类型(例如,加速度计、陀螺仪等)。 + + +### 运作机制 + +在HDF框架中,同类型控制器对象较多时(可能同时存在十几个同类型控制器),如果采用独立服务模式则需要配置更多的设备节点,且相关服务会占据更多的内存资源。相反,采用统一服务模式可以使用一个设备服务作为管理器,统一处理所有同类型对象的外部访问(这会在配置文件中有所体现),实现便捷管理和节约资源的目的。I3C模块接口适配模式采用统一服务模式(如[图1](#fig1)所示)。 + +I3C模块各分层的作用为:接口层提供打开控制器、传输消息、获取和设置控制器参数以及关闭控制器的接口。核心层主要提供绑定设备、初始化设备以及释放设备的能力。适配层实现其他具体的功能。 + + **图 1** I3C统一服务模式 ![image1](figures/统一服务模式结构图.png) -## 开发步骤 +### 约束与限制 + +I3C模块当前仅支持轻量和小型系统内核(LiteOS) 。 + +## 开发指导 + +### 场景介绍 + +I3C可连接单个或多个I3C、I2C从器件,它主要用于: +1. 与传感器通信,如陀螺仪、气压计或支持I3C协议的图像传感器等。 +2. 通过软件或硬件协议转换,与其他通信接口(如 UART 串口等)的设备进行通信。 + +### 接口说明 + +I3cMethod定义: +```c +struct I3cMethod { + int32_t (*sendCccCmd)(struct I3cCntlr *cntlr, struct I3cCccCmd *ccc); + int32_t (*transfer)(struct I3cCntlr *cntlr, struct I3cMsg *msgs, int16_t count); + int32_t (*i2cTransfer)(struct I3cCntlr *cntlr, struct I3cMsg *msgs, int16_t count); + int32_t (*setConfig)(struct I3cCntlr *cntlr, struct I3cConfig *config); + int32_t (*getConfig)(struct I3cCntlr *cntlr, struct I3cConfig *config); + int32_t (*requestIbi)(struct I3cDevice *dev); + void (*freeIbi)(struct I3cDevice *dev); +}; +``` + +**表1** I3cMethod结构体成员的回调函数功能说明 +|函数成员|入参|出参|返回值|功能| +|-|-|-|-|-| +|sendCccCmd|**cntlr**: 结构体指针,核心层I3C控制器;
**ccc**:传入的通用命令代码结构体指针;|**ccc**:传出的通用命令代码结构体指针;|HDF_STATUS相关状态|发送CCC(Common command Code,即通用命令代码)| +|Transfer |**cntlr**: 结构体指针,核心层I3C控制器;
**msgs**:结构体指针,用户消息 ;
**count**:int16_t,消息数量|**msgs**:结构体指针,用户消息 ;|HDF_STATUS相关状态|使用I3C模式传递用户消息| +|i2cTransfer |**cntlr**: 结构体指针,核心层I3C控制器;
**msgs**:结构体指针,用户消息 ;
**count**:int16_t,消息数量|**msgs**:结构体指针,用户消息 ;|HDF_STATUS相关状态|使用I2C模式传递用户消息| +|setConfig|**cntlr**: 结构体指针,核心层I3C控制器;
**config**: 控制器配置参数|无|HDF_STATUS相关状态|设置I3C控制器配置参数| +|getConfig|**cntlr**: 结构体指针,核心层I3C控制器;|**config**: 控制器配置参数|HDF_STATUS相关状态|获取I3C控制器配置参数| +|requestIbi|**device**: 结构体指针,核心层I3C设备;|无|HDF_STATUS相关状态|为I3C设备请求IBI(In-Bind Interrupt,即带内中断)| +|freeIbi|**device**: 结构体指针,核心层I3C设备;|无|HDF_STATUS相关状态|释放IBI| + +### 开发步骤 I3C模块适配的四个环节是实例化驱动入口、配置属性文件、实例化I3C控制器对象以及注册中断处理子程序。 -1. **实例化驱动入口:** +- **实例化驱动入口:** - 实例化HdfDriverEntry结构体成员。 - 调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。 -2. **配置属性文件:** - +- **配置属性文件:** + - 在device_info.hcs文件中添加deviceNode描述。 - 【可选】添加i3c_config.hcs器件属性文件。 -3. **实例化I3C控制器对象:** - +- **实例化I3C控制器对象:** - 初始化I3cCntlr成员。 - 实例化I3cCntlr成员I3cMethod方法集合,其定义和成员函数说明见下文。 -4. **注册中断处理子程序:** +- **注册中断处理子程序:** 为控制器注册中断处理程序,实现设备热接入和IBI(带内中断)功能。 - I3cMethod定义: - ```c - struct I3cMethod { - int32_t (*sendCccCmd)(struct I3cCntlr *cntlr, struct I3cCccCmd *ccc); - int32_t (*transfer)(struct I3cCntlr *cntlr, struct I3cMsg *msgs, int16_t count); - int32_t (*i2cTransfer)(struct I3cCntlr *cntlr, struct I3cMsg *msgs, int16_t count); - int32_t (*setConfig)(struct I3cCntlr *cntlr, struct I3cConfig *config); - int32_t (*getConfig)(struct I3cCntlr *cntlr, struct I3cConfig *config); - int32_t (*requestIbi)(struct I3cDevice *dev); - void (*freeIbi)(struct I3cDevice *dev); - }; - ``` - - 表1 I3cMethod结构体成员的回调函数功能说明 - - |函数成员|入参|出参|返回值|功能| - |-|-|-|-|-| - |sendCccCmd|**cntlr**: 结构体指针,核心层I3C控制器;
**ccc**:传入的通用命令代码结构体指针;|**ccc**:传出的通用命令代码结构体指针;|HDF_STATUS相关状态|发送CCC(Common command Code,即通用命令代码)| - |Transfer |**cntlr**: 结构体指针,核心层I3C控制器;
**msgs**:结构体指针,用户消息 ;
**count**:int16_t,消息数量|**msgs**:结构体指针,用户消息 ;|HDF_STATUS相关状态|使用I3C模式传递用户消息| - |i2cTransfer |**cntlr**: 结构体指针,核心层I3C控制器;
**msgs**:结构体指针,用户消息 ;
**count**:int16_t,消息数量|**msgs**:结构体指针,用户消息 ;|HDF_STATUS相关状态|使用I2C模式传递用户消息| - |setConfig|**cntlr**: 结构体指针,核心层I3C控制器;
**config**: 控制器配置参数|无|HDF_STATUS相关状态|设置I3C控制器配置参数| - |getConfig|**cntlr**: 结构体指针,核心层I3C控制器;|**config**: 控制器配置参数|HDF_STATUS相关状态|获取I3C控制器配置参数| - |requestIbi|**device**: 结构体指针,核心层I3C设备;|无|HDF_STATUS相关状态|为I3C设备请求IBI(In-Bind Interrupt,即带内中断)| - |freeIbi|**device**: 结构体指针,核心层I3C设备;|无|HDF_STATUS相关状态|释放IBI| - -## 开发实例 - -1. 驱动开发首先需要实例化驱动入口,驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。 +1. **实例化驱动入口** + 驱动入口必须为HdfDriverEntry(在 hdf_device_desc.h 中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。 + 一般在加载驱动时HDF会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。 - + I3C驱动入口参考: - + > I3C模块这种类型的控制器会出现很多个控制器挂接的情况,因而在HDF框架中首先会为这类型的控制器创建一个管理器对象,并同时对外发布一个管理器服务来统一处理外部访问。这样,用户需要打开某个控制器时,会先获取到管理器服务,然后管理器服务根据用户指定参数查找到指定控制器。 - > - > I3C管理器服务的驱动由核心层实现,**厂商不需要关注这部分内容的实现,但在实现Init函数的时候需要调用核心层的I3cCntlrAdd函数,它会实现相应功能。** - + > + > I3C管理器服务的驱动由核心层实现,厂商不需要关注这部分内容的实现,但在实现Init函数的时候需要调用核心层的I3cCntlrAdd函数,它会实现相应功能。 + ```c static struct HdfDriverEntry g_virtualI3cDriverEntry = { .moduleVersion = 1, @@ -87,17 +129,19 @@ I3C模块适配的四个环节是实例化驱动入口、配置属性文件、 HDF_INIT(g_i3cManagerEntry); ``` -2. 完成驱动入口注册之后,下一步请在device_info.hcs文件中添加deviceNode信息,并在i3c_config.hcs中配置器件属性。deviceNode信息与驱动入口注册相关,器件属性值对于厂商驱动的实现以及核心层I3cCntlr相关成员的默认值或限制范围有密切关系。 +2. **配置属性文件** + + 完成驱动入口注册之后,下一步请在device_info.hcs文件中添加deviceNode信息,并在i3c_config.hcs中配置器件属性。deviceNode信息与驱动入口注册相关,器件属性值对于厂商驱动的实现以及核心层I3cCntlr相关成员的默认值或限制范围有密切关系。 + + 统一服务模式的特点是device_info文件中第一个设备节点必须为I3C管理器,其各项参数必须如下设置: - **统一服务模式**的特点是device_info文件中第一个设备节点必须为I3C管理器,其各项参数必须如下设置: - |成员名|值| |-|-| |moduleName |HDF_PLATFORM_I3C_MANAGER| |serviceName|无(预留)| |policy|0| |cntlrMatchAttr| 无(预留)| - + 从第二个节点开始配置具体I3C控制器信息,此节点并不表示某一路I3C控制器,而是代表一个资源性质设备,用于描述一类I3C控制器的信息。本例只有一个I3C控制器,如有多个控制器,则需要在device_info文件增加deviceNode信息,以及在i3c_config文件中增加对应的器件属性。 - device_info.hcs 配置参考 @@ -151,14 +195,16 @@ I3C模块适配的四个环节是实例化驱动入口、配置属性文件、 } ``` -3. 配置属性文件完成后,要以核心层I3cCntlr对象的初始化为核心,包括厂商自定义结构体(传递参数和数据),实例化I3cCntlr成员I3cMethod(让用户可以通过接口来调用驱动底层函数)。 +3. **实例化I3C控制器对象** + + 配置属性文件完成后,要以核心层I3cCntlr对象的初始化为核心,包括厂商自定义结构体(传递参数和数据),实例化I3cCntlr成员I3cMethod(让用户可以通过接口来调用驱动底层函数)。 此步骤需要通过实现HdfDriverEntry成员函数(Bind,Init,Release)来完成。 - 自定义结构体参考 > 从驱动的角度看,自定义结构体是参数和数据的载体,而且i3c_config.hcs文件中的数值会被HDF读入通过DeviceResourceIface来初始化结构体成员,其中一些重要数值也会传递给核心层I3cCntlr对象,例如设备号、总线号等。 - + ```c struct VirtualI3cCntlr { struct I3cCntlr cntlr; //【必要】是核心层控制对象,具体描述见下面 @@ -173,7 +219,7 @@ I3C模块适配的四个环节是实例化驱动入口、配置属性文件、 uint32_t i2cFmRate; uint32_t i2cFmPlusRate; }; - + /* I3cCntlr是核心层控制器结构体,其中的成员在Init函数中被赋值 */ struct I3cCntlr { OsalSpinlock lock; @@ -188,109 +234,109 @@ I3C模块适配的四个环节是实例化驱动入口、配置属性文件、 }; ``` - > **【重要】** I3cCntlr成员回调函数结构体I3cMethod的实例化,I3cLockMethod回调函数结构体本例未实现,若要实例化,可参考I2C驱动开发,其他成员在Init函数中初始化 - - - - **init函数参考** - - > **入参:** - > HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 - > - > **返回值:** - > HDF_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义) + > I3cCntlr成员回调函数结构体I3cMethod的实例化,I3cLockMethod回调函数结构体本例未实现,若要实例化,可参考I2C驱动开发,其他成员在Init函数中初始化 + + - init函数参考 + + **入参:** + HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 + + **返回值:** + HDF_STATUS相关状态 (下表为部分展示,如需使用其他状态,可见//drivers/framework/include/utils/hdf_base.h中HDF_STATUS 定义) + + + |状态(值)|问题描述| + |:-|:-:| + |HDF_ERR_INVALID_OBJECT|控制器对象非法| + |HDF_ERR_INVALID_PARAM |参数非法| + |HDF_ERR_MALLOC_FAIL |内存分配失败| + |HDF_ERR_IO |I/O 错误| + |HDF_SUCCESS |传输成功| + |HDF_FAILURE |传输失败| + + **函数说明:** + 初始化自定义结构体对象,初始化I3cCntlr成员,调用核心层I3cCntlrAdd函数。 + + ```c + static int32_t VirtualI3cParseAndInit(struct HdfDeviceObject *device, const struct DeviceResourceNode *node) + { + int32_t ret; + struct VirtualI3cCntlr *virtual = NULL; //【必要】自定义结构体对象 + (void)device; + + virtual = (struct VirtualI3cCntlr *)OsalMemCalloc(sizeof(*virtual)); //【必要】内存分配 + if (virtual == NULL) { + HDF_LOGE("%s: Malloc virtual fail!", __func__); + return HDF_ERR_MALLOC_FAIL; + } + + ret = VirtualI3cReadDrs(virtual, node); //【必要】将i3c_config文件的默认值填充到结构体中 + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: Read drs fail! ret:%d", __func__, ret); + goto __ERR__; + } + ... + virtual->regBase = OsalIoRemap(virtual->regBasePhy, virtual->regSize);//【必要】地址映射 + ret = OsalRegisterIrq(hi35xx->softIrqNum, OSAL_IRQF_TRIGGER_NONE, I3cIbiHandle, "I3C", virtual); //【必要】注册中断程序 + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: register irq failed!", __func__); + return ret; + } + ... + VirtualI3cCntlrInit(virtual); //【必要】I3C设备的初始化 + virtual->cntlr.priv = (void *)node; //【必要】存储设备属性 + virtual->cntlr.busId = virtual->busId; //【必要】初始化I3cCntlr成员 + virtual->cntlr.ops = &g_method; //【必要】I3cMethod的实例化对象的挂载 + (void)OsalSpinInit(&virtual->spin); + ret = I3cCntlrAdd(&virtual->cntlr); //【必要且重要】调用此函数将控制器添加至核心,返回成功信号后驱动才完全接入平台核心层 + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: add i3c controller failed! ret = %d", __func__, ret); + (void)OsalSpinDestroy(&virtual->spin); + goto __ERR__; + } + + return HDF_SUCCESS; + __ERR__: //若控制器添加失败,需要执行去初始化相关函数 + if (virtual != NULL) { + OsalMemFree(virtual); + virtual = NULL; + } + + return ret; + } + + static int32_t VirtualI3cInit(struct HdfDeviceObject *device) + { + int32_t ret; + const struct DeviceResourceNode *childNode = NULL; + + if (device == NULL || device->property == NULL) { + HDF_LOGE("%s: device or property is NULL", __func__); + return HDF_ERR_INVALID_OBJECT; + } + + DEV_RES_NODE_FOR_EACH_CHILD_NODE(device->property, childNode) { + ret = VirtualI3cParseAndInit(device, childNode); + if (ret != HDF_SUCCESS) { + break; + } + } + + return ret; + } + ``` + + - Release 函数参考 + + **入参:** + HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 。 - |状态(值)|问题描述| - |:-|:-:| - |HDF_ERR_INVALID_OBJECT|控制器对象非法| - |HDF_ERR_INVALID_PARAM |参数非法| - |HDF_ERR_MALLOC_FAIL |内存分配失败| - |HDF_ERR_IO |I/O 错误| - |HDF_SUCCESS |传输成功| - |HDF_FAILURE |传输失败| - - > **函数说明:** - > 初始化自定义结构体对象,初始化I3cCntlr成员,调用核心层I3cCntlrAdd函数。 - - ```c - static int32_t VirtualI3cParseAndInit(struct HdfDeviceObject *device, const struct DeviceResourceNode *node) - { - int32_t ret; - struct VirtualI3cCntlr *virtual = NULL; //【必要】自定义结构体对象 - (void)device; - - virtual = (struct VirtualI3cCntlr *)OsalMemCalloc(sizeof(*virtual)); //【必要】内存分配 - if (virtual == NULL) { - HDF_LOGE("%s: Malloc virtual fail!", __func__); - return HDF_ERR_MALLOC_FAIL; - } - - ret = VirtualI3cReadDrs(virtual, node); //【必要】将i3c_config文件的默认值填充到结构体中 - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: Read drs fail! ret:%d", __func__, ret); - goto __ERR__; - } - ... - virtual->regBase = OsalIoRemap(virtual->regBasePhy, virtual->regSize);//【必要】地址映射 - ret = OsalRegisterIrq(hi35xx->softIrqNum, OSAL_IRQF_TRIGGER_NONE, I3cIbiHandle, "I3C", virtual); //【必要】注册中断程序 - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: register irq failed!", __func__); - return ret; - } - ... - VirtualI3cCntlrInit(virtual); //【必要】I3C设备的初始化 - virtual->cntlr.priv = (void *)node; //【必要】存储设备属性 - virtual->cntlr.busId = virtual->busId; //【必要】初始化I3cCntlr成员 - virtual->cntlr.ops = &g_method; //【必要】I3cMethod的实例化对象的挂载 - (void)OsalSpinInit(&virtual->spin); - ret = I3cCntlrAdd(&virtual->cntlr); //【必要且重要】调用此函数将控制器添加至核心,返回成功信号后驱动才完全接入平台核心层 - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: add i3c controller failed! ret = %d", __func__, ret); - (void)OsalSpinDestroy(&virtual->spin); - goto __ERR__; - } - - return HDF_SUCCESS; - __ERR__: //若控制器添加失败,需要执行去初始化相关函数 - if (virtual != NULL) { - OsalMemFree(virtual); - virtual = NULL; - } - - return ret; - } - - static int32_t VirtualI3cInit(struct HdfDeviceObject *device) - { - int32_t ret; - const struct DeviceResourceNode *childNode = NULL; - - if (device == NULL || device->property == NULL) { - HDF_LOGE("%s: device or property is NULL", __func__); - return HDF_ERR_INVALID_OBJECT; - } - - DEV_RES_NODE_FOR_EACH_CHILD_NODE(device->property, childNode) { - ret = VirtualI3cParseAndInit(device, childNode); - if (ret != HDF_SUCCESS) { - break; - } - } - - return ret; - } - ``` - - - **Release 函数参考** + **返回值:** + 无。 + + **函数说明:** + 释放内存和删除控制器,该函数需要在驱动入口结构体中赋值给 Release 接口, 当HDF框架调用Init函数初始化驱动失败时,可以调用 Release 释放驱动资源。所有强制转换获取相应对象的操作**前提**是在Init函数中具备对应赋值的操作。 - > **入参:** - > HdfDeviceObject 是整个驱动对外暴露的接口参数,具备 HCS 配置文件的信息 。 - > - > **返回值:** - > 无。 - > - > **函数说明:** - > 释放内存和删除控制器,该函数需要在驱动入口结构体中赋值给 Release 接口, 当HDF框架调用Init函数初始化驱动失败时,可以调用 Release 释放驱动资源。所有强制转换获取相应对象的操作**前提**是在Init函数中具备对应赋值的操作。 - ```c static void VirtualI3cRemoveByNode(const struct DeviceResourceNode *node) { @@ -327,9 +373,9 @@ I3C模块适配的四个环节是实例化驱动入口、配置属性文件、 static void VirtualI3cRelease(struct HdfDeviceObject *device) { const struct DeviceResourceNode *childNode = NULL; - + HDF_LOGI("%s: enter", __func__); - + if (device == NULL || device->property == NULL) { HDF_LOGE("%s: device or property is NULL", __func__); return; @@ -342,7 +388,9 @@ I3C模块适配的四个环节是实例化驱动入口、配置属性文件、 } ``` -4. 最后一步,实现中断处理程序,在中断处理程序中通过判断中断产生的地址,实现热接入、IBI等操作。 +4. **注册中断处理子程序** + + 在中断处理程序中通过判断中断产生的地址,实现热接入、IBI等操作。 ```c static int32_t VirtualI3cReservedAddrWorker(struct VirtualI3cCntlr *virtual, uint16_t addr) @@ -378,7 +426,7 @@ I3C模块适配的四个环节是实例化驱动入口、配置属性文件、 struct I3cDevice *device = NULL; uint16_t ibiAddr; char *testStr = "Hello I3C!"; - + (void)irq; if (data == NULL) { HDF_LOGW("%s: data is NULL!", __func__); @@ -404,7 +452,7 @@ I3C模块适配的四个环节是实例化驱动入口、配置属性文件、 /* 根据产生IBI的I3C设备调用IBI回调函数 */ return I3cCntlrIbiCallback(device); } - + return HDF_SUCCESS; } ``` \ No newline at end of file diff --git "a/zh-cn/device-dev/driver/figures/HDMI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" "b/zh-cn/device-dev/driver/figures/HDMI\344\275\277\347\224\250\346\265\201\347\250\213\345\233\276.png" index fa578f83d99f47e868312dad99d6b38fa960e794..05da9ba45a46df455935b302c61d5a6c566eacc7 100755 GIT binary patch literal 23083 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 literal 7488 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 D)J8K? diff --git "a/zh-cn/device-dev/driver/figures/\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" "b/zh-cn/device-dev/driver/figures/\347\213\254\347\253\213\346\234\215\345\212\241\346\250\241\345\274\217\347\273\223\346\236\204\345\233\276.png" index f0ddcee70022751a43b9ef1da145c68094da0eab..84474d3fecb9c37254a778d5ef005f8b2fdf5501 100755 GIT binary patch literal 68235 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%0Ajj!BK)AG$(I~Rgy#ye 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 literal 104415 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%0DubxDd-WZ2S3WiJv$B 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

$r@32n}gaWtJ)dto@&p-JHv2a;XsVUWUlNJBmL7 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 BB_#j= -- GitLab