RT-Thread I2C设备驱动框架的对接使用
I2C和SPI是MCU和板載芯片之間最常用的通訊方式,現在先介紹下I2C總線。I2C的基本原理也很簡單,只需要兩根線(時鐘線SCL和信號線SDA)即可實現掛載在I2C總線上設備之間的相互通訊。I2C協(xié)議并未規(guī)定I2C總線上哪個是主機?哪個是從機?,即每個I2C節(jié)點設備都可以做主機發(fā)號施令,也可以作為從機服從指揮。但是一般情況下,我們習慣將MCU作為主機,將I2C總線上掛載的其它芯片當做從機。
RT-Thread中引入了I2C設備的設備驅動框架,該驅動框架提供了基于芯片GPIO進行模擬的和基于芯片片內I2C外設實現的兩種底層硬件接口。因為不同系列芯片的片內I2C外設使用會有所差異,因此常用GPIO模擬的方式實現I2C通訊。
RT-Thread 提供了一套 I/O 設備管理框架,它把 I/O 設備分成了三層進行處理:應用層、I/O 設備管理層、底層驅動。I/O 設備管理框架給上層應用提供了統(tǒng)一的設備操作接口和 I2C 設備驅動接口,給下層提供的是底層驅動接口。應用程序通過 I/O 設備模塊提供的標準接口訪問底層設備,底層設備的變更不會對上層應用產生影響,這種方式使得應用程序具有很好的可移植性,應用程序可以很方便的從一個 MCU 移植到另外一個 MCU。使用正點原子的潘多拉開發(fā)板的例程07_driver_temp_humi進行說明:
在drv_i2c.c文件中使用INIT_BOARD_EXPORT(hw_i2c_init);即RT-Thread中的自動化初始機制,經過層層調用,最終使用rt_device_register()函數將I2C總線注冊至I/O設備管理器。函數調用的順序如下:
hw_i2c_init(【drv_i2c.c】)--->rt_i2c_bit_add_bus(【i2c-bit-ops.c】)--->rt_i2c_bus_device_register(【i2c_core.c】)--->rt_i2c_bus_device_device_init(【i2c_dev.c】)--->rt_device_register(【device.c】)
?
【drv_i2c.c】:設置I2C總線名稱、I2C總線具體操作的引腳、初始化I2C引腳、定義STM32對I2C引腳電平讀和寫的函數、定義STM32中uS級延時函數、使用hw_i2c_init函數將這些設置的內容傳入系統(tǒng)
- stm32_i2c_gpio_init
- stm32_set_sda
- stm32_set_scl_s
- stm32_set_scl
- stm32_get_sda
- stm32_get_scl_s
- stm32_get_scl
- stm32_udelay
- stm32_i2c_bus_unlock
- hw_i2c_init
【i2c-bit-ops.c】:通過對drv_i2c.c文件中提供的對引腳電平操作函數的封裝實現i2c中的起始信號、終止信號、數據傳輸等函數,最后調用rt_i2c_bit_add_bus函數將數據傳輸函數傳入
- i2c_delay
- i2c_delay2
- SCL_H
- i2c_start
- i2c_restart
- i2c_stop
- i2c_waitack
- i2c_writeb
- i2c_readb
- i2c_send_bytes
- i2c_send_ack_or_nack
- i2c_recv_bytes
- i2c_send_address
- i2c_bit_send_address4
- i2c_bit_xfer
- rt_i2c_bit_add_bus
【i2c_core.c】:實現i2c總線設備的注冊、查找和數據傳輸函數
- rt_i2c_bus_device_register
- rt_i2c_bus_device_find
- rt_i2c_transfer
- rt_i2c_master_send
- rt_i2c_master_recv
- rt_i2c_core_init
【i2c_dev.c】:實現i2c_bus_device_read、i2c_bus_device_write、i2c_bus_device_control等I2C中的通用控制函數,通過rt_i2c_bus_device_device_init調用rt_device_register函數最終將I2C總線注冊到I/O設備管理器中
- i2c_bus_device_read
- i2c_bus_device_write
- i2c_bus_device_control
- rt_i2c_bus_device_device_init
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的RT-Thread I2C设备驱动框架的对接使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [pytorch、学习] - 5.3 多
- 下一篇: sql盲注 解决_sql盲注解决方案.d