一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Sensor 驅(qū)動(dòng)框架的整體架構(gòu)詳細(xì)介紹

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 2019-02-22 16:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景與概述

Sensor 是物聯(lián)網(wǎng)重要的一部分,“Sensor 之于物聯(lián)網(wǎng)”相當(dāng)于“眼睛之于人類”。人沒有眼睛就看不到這大千的花花世界,物聯(lián)網(wǎng)沒有了 Sensor 更是不能感知這變化萬(wàn)千的世界。

現(xiàn)在,為物聯(lián)網(wǎng)開發(fā)的 Sensor 已經(jīng)很多了,有加速度計(jì)(Accelerometer),磁力計(jì)(Magnetometer),陀螺儀(Gyroscope),光感計(jì)(Ambient light sensor),接近光(Proximity),氣壓計(jì)(Barometer/pressure),濕度計(jì)(Humidometer)等等。這些傳感器,世界上的各大半導(dǎo)體廠商都有出產(chǎn),雖然增加了市場(chǎng)的可選擇性,同時(shí)也加大了應(yīng)用程序開發(fā)的難度。因?yàn)椴煌膫鞲衅鲝S商、不同的傳感器都需要配套自己獨(dú)有的驅(qū)動(dòng)才能運(yùn)轉(zhuǎn)起來,這樣在開發(fā)應(yīng)用程序的時(shí)候就需要針對(duì)不同的傳感器做適配,自然加大了開發(fā)難度。為了降低應(yīng)用開發(fā)的難度,增加傳感器驅(qū)動(dòng)的可復(fù)用性,我們?cè)O(shè)計(jì)了 Sensor 驅(qū)動(dòng)框架。

Sensor 驅(qū)動(dòng)框架的作用是:為上層提供統(tǒng)一的操作接口,提高上層代碼的可重用性;簡(jiǎn)化底層驅(qū)動(dòng)開發(fā)的難度,只要實(shí)現(xiàn)簡(jiǎn)單的 ops(operations: 操作命令) 就可以將傳感器注冊(cè)到系統(tǒng)上。

整體框架

Sensor 驅(qū)動(dòng)框架的整體架構(gòu)圖如下:

Sensor 驅(qū)動(dòng)框架的整體架構(gòu)詳細(xì)介紹

sensor

它為上層提供的是標(biāo)準(zhǔn) device 接口open/close/read/write/control ,為底層驅(qū)動(dòng)提供的是簡(jiǎn)單的 ops 接口:fetch_data/control。并且框架支持 module(模塊),為底層存在耦合的傳感器設(shè)備提供服務(wù)。

工作原理

Sensor 設(shè)備其實(shí)是對(duì)標(biāo)準(zhǔn)設(shè)備 rt_device 的一個(gè)豐富,是在原有標(biāo)準(zhǔn)設(shè)備的基礎(chǔ)上增加了 Sensor 自己獨(dú)有的一部分 屬性 和 控制命令 ,如下圖所示:

Sensor 驅(qū)動(dòng)框架的整體架構(gòu)詳細(xì)介紹

sensor

整個(gè) Sensor 設(shè)備包括兩個(gè)部分:

繼承自標(biāo)準(zhǔn)設(shè)備的一些特性,包括:標(biāo)準(zhǔn)的控制接口 、回調(diào)函數(shù)、device_id 等。

Sensor 設(shè)備獨(dú)有的部分,包括:Sensor 的類型、相關(guān)的信息、特有的控制命令、ops、以及一些 數(shù)據(jù)的結(jié)構(gòu)。

sensor 的結(jié)構(gòu)體

Sensor 設(shè)備的結(jié)構(gòu)體如下所示:

1struct rt_sensor_device 2{ 3 struct rt_device

parent; /* The standard device */ 4 5

struct rt_sensor_info

info; /* The sensor info data */ 6

struct rt_sensor_config config;

/* The sensor config data */ 7 8

void

*data_buf; /* The buf of the data received */ 9

rt_size_t

data_len; /* The size of the data received */1011

const struct rt_sensor_ops *ops; /* The sensor ops */1213

struct rt_sensor_module *module; /* The sensor module */14};15typedef struct rt_sensor_device *rt_sensor_t;

Sensor 的信息

struct rt_sensor_info info 里存儲(chǔ)的是一些與 Sensor 自身相關(guān)的信息,在 Sensor 設(shè)備注冊(cè)的時(shí)候提供,在使用的過程中不應(yīng)修改其內(nèi)容。具體成員如下所示。

1struct rt_sensor_info 2{ 3 rt_uint8_t type;

/* The sensor type */ 4 rt_uint8_t vendor;

/* Vendor of sensors */ 5 const char *model;

/* model name of sensor */ 6 rt_uint8_t unit;

/* unit of measurement */ 7 rt_uint8_t intf_type;

/* Communication interface type */ 8 rt_int32_t range_max;

/* maximum range of this sensor‘s value. unit is ’unit‘ */ 9 rt_int32_t range_min;

/* minimum range of this sensor’s value. unit is ‘unit’ */10 rt_uint32_t period_min;

/* Minimum measurement period,unit:ms. zero = not a constant rate */11 rt_uint8_t fifo_max;

/* Maximum depth of fifo */12};

Sensor 的類型暫時(shí)只有以下幾種,如果有新的傳感器類型,可以提 PR 添加上。

1#define RT_SENSOR_CLASS_ACCE

(1) /* Accelerometer

*/ 2#define RT_SENSOR_CLASS_GYRO

(2) /* Gyroscope

*/ 3#define RT_SENSOR_CLASS_MAG

(3) /* Magnetometer

*/ 4#define RT_SENSOR_CLASS_TEMP

(4) /* Temperature

*/ 5#define RT_SENSOR_CLASS_HUMI

(5) /* Relative Humidity */ 6#define RT_SENSOR_CLASS_BARO

(6) /* Barometer

*/ 7#define RT_SENSOR_CLASS_LIGHT

(7) /* Ambient light

*/ 8#define RT_SENSOR_CLASS_PROXIMITY

(8) /* Proximity

*/ 9#define RT_SENSOR_CLASS_HR

(9) /* Heart Rate

*/10#define RT_SENSOR_CLASS_TVOC

(10) /* TVOC Level

*/11#define RT_SENSOR_CLASS_NOISE

(11) /* Noise Loudness

*/12#define RT_SENSOR_CLASS_STEP

(12) /* Step sensor

*/

其他的幾個(gè)成員,分別是廠商、model(如:“mpu6050”)、傳感器數(shù)據(jù)的單位、通信接口類型、測(cè)量的最大范圍、測(cè)量的最小范圍、最小測(cè)量周期、硬件 FIFO 的最大深度。

Sensor 的配置

Sensor 驅(qū)動(dòng)框架抽象出了一些公共的配置選項(xiàng),這些可配置的選項(xiàng)置于 struct rt_sensor_config 里, 成員如下:

1struct rt_sensor_config2{3 struct rt_sensor_intf intf; /* sensor interface config */4 struct rt_device_pin_mode irq_pin; /* Interrupt pin, The purpose of this pin is to notification read data */5 rt_uint8_t mode; /* sensor work mode */6 rt_uint8_t power; /* sensor power mode */7 rt_uint16_t odr; /* sensor out data rate */8 rt_int32_t range; /* sensor range of measurement */9};

這些配置項(xiàng)中的 intf 和 irq_pin 是為了將傳感器和硬件解耦而抽象出來的,通過在底層初始化的時(shí)候傳入 struct rt_sensor_config 這個(gè)參數(shù),完成了通信接口的解耦。

1struct rt_sensor_intf2{3 char *dev_name; /* The name of the communication device */4 rt_uint8_t type; /* Communication interface type */5 void *user_data; /* Private data for the sensor. ex. i2c addr,spi cs,control I/O */6};

其余的一些配置項(xiàng)是用 Sensor 特有控制命令控制的,如下所示:

1#define RT_SENSOR_CTRL_GET_ID (0) /* 讀設(shè)備ID */2#define RT_SENSOR_CTRL_GET_INFO (1) /* 獲取設(shè)備信息 */3#define RT_SENSOR_CTRL_SET_RANGE (2) /* 設(shè)置傳感器測(cè)量范圍 */4#define RT_SENSOR_CTRL_SET_ODR (3) /* 設(shè)置傳感器數(shù)據(jù)輸出速率,unit is HZ */5#define RT_SENSOR_CTRL_SET_MODE (4) /* 設(shè)置工作模式 */6#define RT_SENSOR_CTRL_SET_POWER (5) /* 設(shè)置電源模式 */7#define RT_SENSOR_CTRL_SELF_TEST (6) /* 自檢 */

結(jié)合 ops 中的 control 接口使用,就可以完成傳感器的配置了。

Sensor 數(shù)據(jù)的存儲(chǔ)

為了方便數(shù)據(jù)的解析,規(guī)定每一個(gè)類型的 Sensor 都有自己獨(dú)有的數(shù)據(jù)結(jié)構(gòu),這些成員之間使用共用體以減少代碼量。

特有的 ops

ops(操作函數(shù))包含兩個(gè)函數(shù)指針, 一個(gè)的作用是獲取傳感器數(shù)據(jù)(fetch_data),另一個(gè)的作用是通過控制命令控制傳感器(control)。

1struct rt_sensor_ops2{3 rt_size_t (*fetch_data)(struct rt_sensor_device *sensor, void *buf, rt_size_t len);4 rt_err_t (*control)(struct rt_sensor_device *sensor, int cmd, void *arg);5};

注冊(cè)方式

傳感器驅(qū)動(dòng)框架提供了一個(gè) Sensor 注冊(cè)函數(shù),通過傳入 Sensor 的控制塊,名稱,標(biāo)志位和私有數(shù)據(jù),就可以完成傳感器設(shè)備的注冊(cè)。

1int rt_hw_sensor_register(rt_sensor_t sensor,2 const char *name,3 rt_uint32_t flag,4 void *data);

這樣看來 Sensor 驅(qū)動(dòng)框架依托于標(biāo)準(zhǔn)的設(shè)備框架,只要將傳感器驅(qū)動(dòng)對(duì)接到 Sensor 的 ops 上,并通過調(diào)用 rt_hw_sensor_register 函數(shù)注冊(cè)為 Sensor 設(shè)備就可以通過標(biāo)準(zhǔn)的設(shè)備接口控制傳感器了。

module支持

module 的定義是解決底層有耦合的兩個(gè)傳感器而出現(xiàn)的,有些傳感器既有加速度計(jì)的功能又有陀螺儀的功能,并且他們的FIFO是共用的,在 FIFO 模式下,只能將兩個(gè)類型的傳感器的數(shù)據(jù)同時(shí)讀出,這就說明他們的數(shù)據(jù)是耦合的。

為了解決這個(gè)問題,我們定義了 module 的類型

1struct rt_sensor_module2{3 rt_mutex_t lock; /* The module lock */45 rt_sensor_t sen[RT_SENSOR_MODULE_MAX]; /* The module contains a list of sensors */6 rt_uint8_t sen_num; /* Number of sensors contained in the module */7};

里面包含有耦合的傳感器的設(shè)備控制塊指針,通過這個(gè)功能就可以在讀取陀螺儀的數(shù)據(jù)的時(shí)候,同時(shí)更新加速度計(jì)的值,解決了底層耦合的問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2565

    文章

    52954

    瀏覽量

    767016
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2930

    文章

    46210

    瀏覽量

    392064
  • Sensor
    +關(guān)注

    關(guān)注

    0

    文章

    135

    瀏覽量

    50432

原文標(biāo)題:RT-Thread傳感器設(shè)備驅(qū)動(dòng)框架介紹

文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    北京迅為RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開發(fā)內(nèi)核HDF驅(qū)動(dòng)框架架構(gòu)

    北京迅為RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開發(fā)內(nèi)核HDF驅(qū)動(dòng)框架架構(gòu)
    的頭像 發(fā)表于 03-11 14:13 ?1102次閱讀
    北京迅為RK3568開發(fā)板OpenHarmony系統(tǒng)南向<b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)內(nèi)核HDF<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>框架</b><b class='flag-5'>架構(gòu)</b>

    一種基于AliOS Things的uData感知設(shè)備軟件框架

    。根據(jù)上面的各模塊介紹,匯總了下圖來描述了對(duì)整個(gè)uData框架整體實(shí)現(xiàn)和通訊機(jī)制的理解和認(rèn)識(shí)。uData框架小結(jié)本文主要是從uData的軟件設(shè)計(jì)實(shí)現(xiàn)方面來實(shí)現(xiàn)。關(guān)于uData移植,
    發(fā)表于 01-22 17:16

    Linux內(nèi)核電源管理的整體架構(gòu)介紹

    電子產(chǎn)品來說,電源管理相當(dāng)重要。因此,這部分工作往往在開發(fā)周期中占據(jù)相當(dāng)大的比重,圖1呈現(xiàn)了Linux內(nèi)核電源管理的整體架構(gòu)。大體可以歸納為如下幾類:
    發(fā)表于 07-05 07:00

    USB驅(qū)動(dòng)程序框架介紹

    《ARM嵌入式Linux系統(tǒng)開發(fā)詳解》第25章USB驅(qū)動(dòng)開發(fā),本章講解了Linux內(nèi)核USB驅(qū)動(dòng)體系結(jié)構(gòu)、USB設(shè)備驅(qū)動(dòng)結(jié)構(gòu)等知識(shí),并在最后給出了兩個(gè)USB設(shè)備驅(qū)動(dòng)開發(fā)實(shí)例。本節(jié)為大家
    發(fā)表于 07-11 07:38

    HarmonyOS HDF驅(qū)動(dòng)框架---驅(qū)動(dòng)開發(fā)

    +=#驅(qū)動(dòng)代碼Makefile的目錄驅(qū)動(dòng)配置HDF使用HCS作為配置描述源碼,HCS詳細(xì)介紹參考配置管理介紹
    發(fā)表于 09-16 17:59

    FPGA芯片整體架構(gòu)

    FPGA芯片整體架構(gòu)如下所示,整個(gè)芯片是以BANK進(jìn)...
    發(fā)表于 07-29 07:00

    FPGA 內(nèi)部詳細(xì)架構(gòu) 精選資料分享

    FPGA 內(nèi)部詳細(xì)架構(gòu)FPGA 芯片整體架構(gòu)1.可編程輸入輸出單元(IOB)(Input Output Block)2.可配置邏輯塊(CLB)(Configurable Logic B
    發(fā)表于 07-30 08:10

    數(shù)據(jù)采集整體框架

    背景:對(duì)于一些需要快速驗(yàn)證傳感器性能,或者某些實(shí)驗(yàn)需要快速采集數(shù)據(jù)并且需要直觀顯示成波形或者圖片, 搭建一個(gè)簡(jiǎn)易方便的數(shù)據(jù)采集分析系統(tǒng)是有必要的.本文主要介紹以下幾個(gè)方面:數(shù)據(jù)采集整體框架.Pc
    發(fā)表于 08-17 08:46

    初探Android系統(tǒng)整體架構(gòu)

    系統(tǒng)的核心技術(shù)點(diǎn),帶領(lǐng)大家初探Android系統(tǒng)全貌以及內(nèi)部運(yùn)作機(jī)制。雖然Android系統(tǒng)非常龐大且錯(cuò)綜復(fù)雜,需要具備全面的技術(shù)棧,但整體架構(gòu)設(shè)計(jì)清晰。Android底層內(nèi)核空間以Linux Kernel作為基石,上層用戶空間由Native系統(tǒng)庫(kù)、虛擬機(jī)運(yùn)行環(huán)境、
    發(fā)表于 08-20 06:32

    cola os程序框架介紹

    創(chuàng)建4.cola_os stime定時(shí)器創(chuàng)建前言在嵌入式軟件開發(fā),包括單片機(jī)開發(fā)中,軟件架構(gòu)對(duì)于開發(fā)人員是一個(gè)必須認(rèn)真考慮的問題。軟件架構(gòu)對(duì)于系統(tǒng)整體的穩(wěn)定性和可靠性是非常重要的,一個(gè)合適的軟件
    發(fā)表于 11-08 08:17

    RK平臺(tái)PHY驅(qū)動(dòng)與NXP的整體框架有哪些區(qū)別呢

    RK平臺(tái)PHY驅(qū)動(dòng)與NXP的整體框架有哪些區(qū)別呢?
    發(fā)表于 02-10 06:04

    傳感驅(qū)動(dòng)模型框架原理和傳感器抽象驅(qū)動(dòng)適配開發(fā)過程分析

    (傳感器)驅(qū)動(dòng)模型。Sensor驅(qū)動(dòng)模型主要為上層提供穩(wěn)定接口能力,對(duì)驅(qū)動(dòng)開發(fā)者提供開放的接口實(shí)現(xiàn)和抽象的配置接口能力。傳感器模型框架
    發(fā)表于 03-29 11:38

    RT-Thread Sensor框架和內(nèi)置的lis2dh12驅(qū)動(dòng)實(shí)現(xiàn)說明

    LIS3DH驅(qū)動(dòng)的實(shí)現(xiàn)說明LIS3DH驅(qū)動(dòng)基于Sensor框架內(nèi)置的LIS2DH12修改而來,操作步驟參考本節(jié)其余內(nèi)容。驅(qū)動(dòng)支持pollin
    發(fā)表于 05-17 16:18

    HarmonyOS多媒體框架介紹

    、小的各種設(shè)備。 2 、音頻框架介紹: 音頻框架主要采用CS的架構(gòu),支持多個(gè)音頻同時(shí)運(yùn)行。 音頻模塊分為三個(gè),分別是Audio Renderer、Audio Capturer、Audi
    發(fā)表于 01-03 16:36

    Linux DMA Engine框架介紹

    此會(huì)話描述如何從設(shè)備驅(qū)動(dòng)程序在Linux中使用DMA。 這包括內(nèi)存分配,緩存控制和DMA設(shè)備控制。 詳細(xì)介紹了Linux DMA Engine框架。
    的頭像 發(fā)表于 11-23 06:29 ?6713次閱讀