1、两个设备模型
在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。
1、总线设备模型
struct rt_spi_bus
{
struct rt_device parent;
rt_uint8_t mode;
const struct rt_spi_ops *ops;
struct rt_mutex lock;
struct rt_spi_device *owner;
};
这个是会被RT-Thread的自动初始化机制自动注册进设备框架的。
int rt_hw_spi_init(void)
{
……
rt_hw_spi_bus_init();
->rt_spi_bus_register(……,);
->rt_spi_bus_device_init(bus, name);
->rt_device_register(device, name, RT_DEVICE_FLAG_RDWR);
}
INIT_BOARD_EXPORT(rt_hw_spi_init);
2、从设备模型
struct rt_spi_device
{
struct rt_device parent;
struct rt_spi_bus *bus;
struct rt_spi_configuration config;
void *user_data;
};
这个设备一般是在挂载的时候被注册进设备框架。
rt_err_t rt_spi_bus_attach_device(struct rt_spi_device *device,
const char *name,
const char *bus_name,
void *user_data)
{
……
rt_spidev_device_init(device, name);
->rt_device_register(device, name, RT_DEVICE_FLAG_RDWR);
……
}
2、与spi相关的三个文件
1、drv_spi.c

以上是这个文件的几个函数:
stm32_spi_init:主要完成了spi硬件的初始化,主要完成这个函数:HAL_SPI_Init。spixfer:spi总线数据传输,HAL_SPI_Transmit、HAL_SPI_Receive。spi_configure:spi总线的配置,最后通过调用

本文详细解析了RT-Thread中SPI设备驱动的结构,包括总线设备模型rt_spi_bus、从设备模型rt_spi_device,以及关键函数如spi_init、spi_configure和spi_transfer的运作。通过实例说明了SPI初始化、挂载和配置的过程,重点展示了驱动文件drv_spi.c和核心接口spi_core.c的作用。
最低0.47元/天 解锁文章
2609

被折叠的 条评论
为什么被折叠?



