• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * @file hi_i2c.h
3  *
4  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /** @defgroup iot_i2c  I2C
19  *  @ingroup drivers
20  */
21 #ifndef __HI_I2C_H__
22 #define __HI_I2C_H__
23 
24 #include <hi_types_base.h>
25 
26 /*
27  * I2C Interface
28  */
29 #define I2C_RATE_DEFAULT  100000
30 
31 typedef hi_void (*i2c_reset_func)(hi_void);
32 typedef hi_void (*i2c_prepare_func)(hi_void);
33 typedef hi_void (*i2c_restore_func)(hi_void);
34 
35 /**
36  * @ingroup iot_i2c
37  *
38  * I2C callback function. CNcomment:I2C回调函数。CNend
39  */
40 typedef struct {
41     i2c_reset_func   reset_func;    /**< This function is called back when the communication with the slave device
42                                          is abnormal.CNcomment:I2C从异常处理函数CNend */
43     i2c_prepare_func prepare_func;  /**< This function is called back before the I2C read/write operation to implement
44                                          the preparations before the I2C operation.
45                                          CNcomment:I2C操作前准备函数CNend */
46     i2c_restore_func restore_func;  /**< After the I2C read/write operation is performed, this function is
47                                          called back to implement the recovery after the I2C operation.
48                                          CNcomment:I2C操作后恢复函数CNend */
49 } hi_i2c_func;
50 
51 /**
52  * @ingroup iot_i2c
53  *
54  * I2C TX/RX data descriptor. CNcomment:I2C发送/接收数据描述符。CNend
55  */
56 typedef struct {
57     hi_u8*  send_buf;        /**< Data TX pointer. The user needs to ensure that no null pointer is transferred.
58                                 CNcomment:数据发送指针CNend */
59     hi_u32  send_len;        /**< Length of sent data (unit: byte).
60                                 CNcomment:发送数据长度(单位:byte)CNend */
61     hi_u8*  receive_buf;     /**< Data RX pointer. CNcomment:数据接收指针CNend */
62     hi_u32  receive_len;     /**< Length of received data (unit: byte).
63                                 CNcomment:接收数据长度(单位:byte)CNend */
64 } hi_i2c_data;
65 
66 /**
67  * @ingroup iot_i2c
68  *
69  * I2C hardware index. CNComment:I2C硬件设备枚举。CNend
70  */
71 typedef enum {
72     HI_I2C_IDX_0,
73     HI_I2C_IDX_1,
74 } hi_i2c_idx;
75 
76 /**
77 * @ingroup  iot_i2c
78 * @brief  Set I2C baudrate. CNcomment:I2C设置波特率。CNend
79 *
80 * @par 描述:
81 *           Set I2C baudrate. CNcomment:I2C设置波特率。CNend
82 *
83 * @attention Multiple tasks are not protected (multiple tasks are not supported). CNcomment:未作
84 多任务保护(不支持多任务)。CNend
85 * @param  id       [IN] type #hi_i2c_idx,I2C hardware selection. CNcomment:I2C硬件设备选择。CNend
86 * @param  baudrate [IN] type #hi_u32,I2C baudrate. CNcomment:I2C波特率。CNend
87 *
88 * @retval #0          Success.
89 * @retval #Other      Failure. For details, see hi_errno.h.
90 * @par 依赖:
91 *           @li hi_i2c.h:Declares the API.CNcomment:该接口声明所在的头文件。CNend
92 * @see  hi_i2c_write|hi_i2c_receive。
93 */
94 hi_u32 hi_i2c_set_baudrate(hi_i2c_idx id, hi_u32 baudrate);
95 
96 /**
97 * @ingroup  iot_i2c
98 * @brief  I2C data TX and RX.CNcomment:I2C发送与接收数据。CNend
99 *
100 * @par 描述:
101 *           The I2C sends data to the slave device and then receives data from the slave device.
102 CNcomment:I2C向从机发送数据,然后接收从机数据。CNend
103 *
104 * @attention Multi-tasking is not supported. CNcomment:未作多任务保护(不支持多任务)。CNend
105 * @param  id       [IN] type #hi_i2c_idx,I2C hardware selection. CNcomment:I2C硬件设备选择。CNend
106 * @param  device_addr [IN] type #hi_u16,The device ID. High three bits of offset address of the I2C device on chipset.
107 CNcomment:设备号及设备片内偏移地址高3位(从设备哪个地方开始读)。CNend
108 * @param  i2c_data  [IN/OUT] type #const hi_i2c_data*,The data descriptor to be received.
109 *                             The structure member data sending pointer and data receiving pointer cannot be null.
110 CNcomment:待接收数据描述符,结构体成员数据发送指针和数据接收指针都不为空。CNend
111 *
112 * @retval #0          Success.
113 * @retval #Other      Failure. For details, see hi_errno.h.
114 * @par 依赖:
115 *           @li hi_i2c.h:Declares the API.CNcomment:该接口声明所在的头文件。CNend
116 * @see  hi_i2c_write|hi_i2c_receive。
117 */
118 hi_u32 hi_i2c_writeread(hi_i2c_idx id, hi_u16 device_addr, const hi_i2c_data *i2c_data);
119 
120 /**
121 * @ingroup  iot_i2c
122 * @brief  I2C data TX. CNcomment:I2C发送数据。CNend
123 *
124 * @par 描述:
125 *           I2C data TX. CNcomment:I2C发送数据。CNend
126 *
127 * @attention Multiple tasks are not protected (multiple tasks are not supported). CNcomment:未作
128 多任务保护(不支持多任务)。CNend
129 * @param  id       [IN] type #hi_i2c_idx,I2C hardware selection. CNcomment:I2C硬件设备选择。CNend
130 * @param  device_addr [IN] type #hi_u16,The device ID. High three bits of offset address of the I2C device on chipset.
131 CNcomment:设备号及设备片内偏移地址高3位(从设备哪个地方开始读)。CNend
132 * @param  i2c_data  [IN] type #const hi_i2c_data*,The data descriptor to be received. The structure member data sending
133 *                             pointer and data receiving pointer cannot be null.
134 CNcomment:待接收数据描述符,结构体成员数据发送指针和数据接收指针都不为空。CNend
135 *
136 * @retval #0          Success.
137 * @retval #Other      Failure. For details, see hi_errno.h.
138 * @par 依赖:
139 *           @li hi_i2c.h:Declares the API.CNcomment:该接口声明所在的头文件。CNend
140 * @see  hi_i2c_writeread|hi_i2c_receive。
141 */
142 hi_u32 hi_i2c_write(hi_i2c_idx id, hi_u16 device_addr, const hi_i2c_data *i2c_data);
143 
144 /**
145 * @ingroup  iot_i2c
146 * @brief  I2C data RX. CNcomment:I2C接收数据。CNend
147 *
148 * @par 描述:
149 *            I2C data RX. CNcomment:I2C接收数据。CNend
150 *
151 * @attention Multi-tasking is not supported. CNcomment:未作多任务保护(不支持多任务)。CNend
152 * @param  id       [IN] type #hi_i2c_idx,I2C hardware selection. CNcomment:I2C硬件设备选择。CNend
153 * @param  device_addr [IN] type #hi_u16,The device ID. High three bits of offset address of the I2C device on chipset.
154 CNcomment:设备号及设备片内偏移地址高3位(从设备哪个地方开始读)。CNend
155 * @param  i2c_data  [OUT] type #const hi_i2c_data*,The data descriptor to be received. The structure member data sending
156 *                             pointer and data receiving pointer cannot be null.
157 CNcomment:待接收数据描述符,结构体成员数据发送指针和数据接收指针都不为空。CNend
158 *
159 * @retval #0          Success.
160 * @retval #Other      Failure. For details, see hi_errno.h.
161 * @par 依赖:
162 *           @li hi_i2c.h:Declares the API.CNcomment:该接口声明所在的头文件。CNend
163 * @see  hi_i2c_write|hi_i2c_sendreceive。
164 */
165 hi_u32 hi_i2c_read(hi_i2c_idx id, hi_u16 device_addr, const hi_i2c_data *i2c_data);
166 
167 /**
168 * @ingroup  iot_i2c
169 * @brief  Initializes the I2C controller. CNcomment:I2C初始化。CNend
170 *
171 * @par 描述:
172 *           Initializes the I2C controller. CNcomment:I2C初始化。CNend
173 *
174 * @attention None
175 * @param  id       [IN] type #hi_i2c_idx,I2C hardware selection. CNcomment:I2C硬件设备选择。CNend
176 * @param  baudrate [IN] type #hi_u32,I2C baudrate. CNcomment:I2C波特率。CNend
177 *
178 * @retval #0          Success.
179 * @retval #Other      Failure. For details, see hi_errno.h.
180 * @par 依赖:
181 *           @li hi_i2c.h:Declares the API.CNcomment:该接口声明所在的头文件。CNend
182 * @see  hi_i2c_deinit。
183 */
184 hi_u32 hi_i2c_init(hi_i2c_idx id, hi_u32 baudrate);
185 
186 /**
187 * @ingroup  iot_i2c
188 * @brief  Exits the I2C module.CNcomment:退出I2C模块。CNend
189 *
190 * @par 描述:
191 *          Exits the I2C module. CNcomment:退出I2C模块。CNend
192 *
193 * @attention This API is called after hi_i2c_init is called. CNcomment:hi_i2c_init调用后再使用。CNend
194 * @param  id       [IN] type #hi_i2c_idx,I2C hardware selection. CNcomment:I2C硬件设备选择。CNend
195 *
196 * @retval #0          Success.
197 * @retval #Other      Failure. For details, see hi_errno.h.
198 * @par 依赖:
199 *           @li hi_i2c.h:Declares the API.CNcomment:该接口声明所在的头文件。CNend
200 * @see  hi_i2c_init。
201 */
202 hi_u32 hi_i2c_deinit(hi_i2c_idx id);
203 
204 /**
205 * @ingroup  iot_i2c
206 * @brief  Registers the I2C callback function.CNcomment:注册I2C回调函数。CNend
207 *
208 * @par 描述:
209 *           Registers the I2C callback function, for extension.CNcomment:注册I2C回调函数,用于扩展。CNend
210 *
211 * @attention None
212 * @param  id      [IN] type #hi_i2c_idx,I2C hardware selection. CNcomment:I2C硬件设备选择。CNend
213 * @param  pfn     [IN] type #hi_i2c_func,Callback function. CNcomment:回调函数。CNend
214 *
215 * @retval #0          Success.
216 * @retval #Other      Failure. For details, see hi_errno.h.
217 * @par 依赖:
218 *           @li hi_i2c.h:Declares the API.CNcomment:该接口声明所在的头文件。CNend
219 * @see  None
220 */
221 hi_void hi_i2c_register_reset_bus_func(hi_i2c_idx id, hi_i2c_func pfn);
222 
223 #endif
224