RTT设备与驱动之I2C:
生活随笔
收集整理的這篇文章主要介紹了
RTT设备与驱动之I2C:
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
I2C主從結(jié)構(gòu)(可以有多個(gè)主機(jī),但同一時(shí)間只能有一個(gè)):I2C有兩種地址結(jié)構(gòu)7位/10位
總線(xiàn)空閑時(shí),SDA 和 SCL 都處于高電平狀態(tài)。
開(kāi)始信號(hào):?SCL 為高電平時(shí),主機(jī)將 SDA 拉低
結(jié)束信號(hào):?在 SDA 為低電平時(shí),主機(jī)將 SCL 拉高并保持高電平,然后在將 SDA 拉高,表示傳輸結(jié)束
API函數(shù):
rt_device_t rt_device_find(const char* name);查找設(shè)備 讀寫(xiě)信息rt_size_t rt_i2c_transfer(struct rt_i2c_bus_device *bus,struct rt_i2c_msg msgs[],rt_uint32_t num); ?struct rt_i2c_msg { rt_uint16_t addr; /* 從機(jī)地址 */ rt_uint16_t flags; /* 讀、寫(xiě)標(biāo)志等 */ rt_uint16_t len; /* 讀寫(xiě)數(shù)據(jù)字節(jié)數(shù) */ rt_uint8_t *buf; /* 讀寫(xiě)數(shù)據(jù)緩沖區(qū)指針 */ } 讀寫(xiě)寄存器示例: #include <rtthread.h> #include <rtdevice.h>#define AHT10_I2C_BUS_NAME "i2c1" /* 傳感器連接的I2C總線(xiàn)設(shè)備名稱(chēng) */ #define AHT10_ADDR 0x38 /* 從機(jī)地址 */ #define AHT10_CALIBRATION_CMD 0xE1 /* 校準(zhǔn)命令 */ #define AHT10_NORMAL_CMD 0xA8 /* 一般命令 */ #define AHT10_GET_DATA 0xAC /* 獲取數(shù)據(jù)命令 */static struct rt_i2c_bus_device *i2c_bus = RT_NULL; /* I2C總線(xiàn)設(shè)備句柄 */ static rt_bool_t initialized = RT_FALSE; /* 傳感器初始化狀態(tài) *//* 寫(xiě)傳感器寄存器 */ static rt_err_t write_reg(struct rt_i2c_bus_device *bus, rt_uint8_t reg, rt_uint8_t *data) {rt_uint8_t buf[3];struct rt_i2c_msg msgs;buf[0] = reg; //cmdbuf[1] = data[0];buf[2] = data[1];msgs.addr = AHT10_ADDR;msgs.flags = RT_I2C_WR;msgs.buf = buf;msgs.len = 3;/* 調(diào)用I2C設(shè)備接口傳輸數(shù)據(jù) */if (rt_i2c_transfer(bus, &msgs, 1) == 1){return RT_EOK;}else{return -RT_ERROR;} }/* 讀傳感器寄存器數(shù)據(jù) */ static rt_err_t read_regs(struct rt_i2c_bus_device *bus, rt_uint8_t len, rt_uint8_t *buf) {struct rt_i2c_msg msgs;msgs.addr = AHT10_ADDR;msgs.flags = RT_I2C_RD;msgs.buf = buf;msgs.len = len;/* 調(diào)用I2C設(shè)備接口傳輸數(shù)據(jù) */if (rt_i2c_transfer(bus, &msgs, 1) == 1){return RT_EOK;}else{return -RT_ERROR;} } 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的RTT设备与驱动之I2C:的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ESP32移植wolfssl方法
- 下一篇: 中断锁与信号量的一种使用场景