《RT-Thread设备驱动开发指南》读书笔记三 I2C驱动
[复制链接]
本帖最后由 damiaa 于 2023-9-16 21:45 编辑
《RT-Thread设备驱动开发指南》读书笔记三 I2C驱动
《RT-Thread设备驱动开发指南》读书笔记一 串口驱动
《RT-Thread设备驱动开发指南》读书笔记二 PIN驱动之后
RT-Thread的所有设备类都是rt_device派生来的。所以都有相同的继承
I2C设备也是一样。为什么要了解I2C驱动呢,因为很多设备都用到I2C,玩嵌入式不懂 I2C 那没得玩。
应用层:应用程序代码
I2C设备驱动框架 与平台无关 代码在components\drivers\i2c中包含下面两个文件
I2c_core.c
i2c_dev.c:
i2c-bit-ops.c 如果是模拟i2c有这个软件:
I2C总线设备驱动层与设备相关,也是我们移植需要动手的地方。
分硬件I2C驱动 软件I2C驱动 代码位于bsp目录
硬件I2C驱动
需要实现
struct rt_i2c_bus_device_ops
{
rt_size_t (*master_xfer)(struct rt_i2c_bus_device *bus,
struct rt_i2c_msg msgs[],
rt_uint32_t num);
rt_size_t (*slave_xfer)(struct rt_i2c_bus_device *bus,
struct rt_i2c_msg msgs[],
rt_uint32_t num);
rt_err_t (*i2c_bus_control)(struct rt_i2c_bus_device *bus,
rt_uint32_t,
rt_uint32_t);
};
struct rt_i2c_bus_device
{
struct rt_device parent;
const struct rt_i2c_bus_device_ops *ops;
rt_uint16_t flags;
struct rt_mutex lock;
rt_uint32_t timeout;
rt_uint32_t retries;
void *priv;
};
然后调用
rt_err_t rt_i2c_bus_device_register(struct rt_i2c_bus_device *bus,const char *bus_name);函数注册
软件I2C驱动
需要实现
static const struct rt_i2c_bus_device_ops i2c_bit_bus_ops =
{
i2c_bit_xfer,
RT_NULL,
RT_NULL
};
rt_i2c_bit_add_bus(struct rt_i2c_bus_device *bus,const char *bus_name)注册
具体实现就不细说了。可以参照相关代码实验。
驱动开发完成后要配置Kconfig
比如在:bsp\xxx\drivers\Kconfig中
Config BSP_USING_I2C4
bool “Enable I2C4”
select RT_USING_I2C
default y
等
验证驱动可以在控制台:
Msh>list_device 命令验证。调用应用程序进一步实验验证。
根据了解的先介绍到这里。谢谢
|