RT-Thread学习笔记(5):SPI驱动框架分析

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

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总线的配置,最后通过调用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值