RT-Thread SPIデバイスドライバ使用

7231 ワード

RT-Thread SPIデバイスドライバ使用
使用プロセス
1、spiバスをシステムに登録する
int rt_hw_spi_init(void)
{
    stm32_get_dma_info();
    return rt_hw_spi_bus_init();
}
INIT_BOARD_EXPORT(rt_hw_spi_init);
ここではもうトゥを使いました.hwspi_initは選択されたspiバスを自動的にシステムに登録しますので、マニュアル登録は不要です.関数コールの流れは以下の通りです.
rt_hw_spi_bus_init()--->
/* register a SPI bus */
rt_err_t rt_spi_bus_register(struct rt_spi_bus       *bus,
                             const char              *name,
                             const struct rt_spi_ops *ops) --->
/* spi     RT_Device_Class_SPIBUS        */
rt_err_t rt_spi_bus_device_init(struct rt_spi_bus *bus, const char *name)                          
                            
2、spiデバイスをシステムに登録し、spiバスに追加して、関数呼び出しの流れは:
/** 1、  rt_spi_bus_attach_device(spi_device, device_name, bus_name, (void *)cs_pin)
    2、attach a device on SPI bus 
*/
rt_err_t rt_hw_spi_device_attach(const char *bus_name, 
                                 const char *device_name,
                                 GPIO_TypeDef *cs_gpiox, 
                                 uint16_t cs_gpio_pin) -->
/** 1、  bus_name  spi_bus  
    2、 spi_bus     spi_dev   bus
    3、  rt_spidev_device_init
    4、 user_data   device->parent.user_data
        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)-->
                            
/* spi_dev  RT_Device_Class_SPIDevice      */      
rt_err_t rt_spidev_device_init(struct rt_spi_device *dev, const char *name)
使用例:rt_hwspi_device_atech(「spi 1」、「spi 10」、GPIOA、GPIOION(U 5);
3、FLASHデバイスをシステムに登録し、SPiデバイスに追加する.
struct spi_flash_device
{
    struct rt_device                flash_device;
    struct rt_device_blk_geometry   geometry;
    struct rt_spi_device *          rt_spi_device;
    struct rt_mutex                 lock;
    void *                          user_data;
};

/** 1、  spi_device_name  spi_dev  
    2、 spi_dev     spi_flash_device   rt_spi_device
    3、 spi_flash_device  RT_Device_Class_SPIDevice      
*/
rt_err_t w25qxx_init(const char * flash_device_name, const char * spi_device_name)
使用例:1、w 25 qxx_init(「w 25 q 128」、「spi 10」);spi_を使うflashw 25 qxxドライバ/2、rt_sfud_flashprobe(「w 25 q 128」、「spi 10」);spi_を使うflashsfudドライバ*/