日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RT-Thread I2C设备驱动框架的对接使用

發(fā)布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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设备驱动框架的对接使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。