RT-Thread SPIデバイスドライバ使用
7231 ワード
RT-Thread SPIデバイスドライバ使用
使用プロセス
1、spiバスをシステムに登録する
3、FLASHデバイスをシステムに登録し、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ドライバ*/