Q群:
电话:
邮箱:
地址:
以I2C接口的sensor为例,进行配置。
在对应的 oneos\projects\xxxxx(project文件夹) 目录下打开 OneOS-Cube 工具,在命令行输入 menuconfig 打开可视化配置界面;
如下图示,通过空格或向右方向键选择 Drivers->I2C 下的 Using I2C device drivers 和 Use GPIO to simulate I2C 以及Use GPIO to simulate I2C下面的Enable I2C1 BUS (software simulation选项;
[*] Using I2C device drivers
[*] Use GPIO to simulate I2C
(10) simulate I2C bus delay(us) (NEW)
[*] Enable I2C1 BUS (software simulation) --->
[ ] Enable I2C2 BUS (software simulation) (NEW) ----
[ ] Enable I2C3 BUS (software simulation) (NEW) ----
[ ] Enable I2C4 BUS (software simulation) (NEW) ----
[ ] Use at24cxx eeprom
进入Enable I2C1 BUS (software simulation),设置scl、sda的具体引脚编号(根据板子实际电路设置 );
*** Notice: PC0 --> 32; PC1 --> 33 ***
(32) i2c1 scl pin number (NEW)
(33) I2C1 sda pin number (NEW)
选择Drivers->Sensors,使能Using sensor device drivers,然后选择具体的sensor型号,如bmp180;
[*] Using SENSOR device drivers
[ ] Using SENSOR CMD (NEW)
[ ] Enable infrared (NEW) ----
[ ] Enable sth20 (NEW) ----
[ ] Enable Audio Device ----
[ ] Enable adxl345 (NEW) ----
[ ] Enable bh1750 (NEW) ----
[*] Enable bmp180 --->
[ ] Enable mpu6xxx (NEW) ----
[ ] Enable ak8963 (NEW) ----
[ ] Enable lsm6dsl (NEW) ----
进行bmp180配置;
(i2c1) bmp180 i2c bus name (NEW)
(0x77) bmp180 i2c addr(7bit) (NEW)
退出并保存设置
使用键盘Q键或Esc退出, Save configuration?中选择键盘单击Y保存设置即可。
在上一步打开的 OneOS-Cube 工具命令行输入 scons --ide=mdk5 构建工程;
接口 | 说明 |
---|---|
os_device_find() | 根据传感器设备名称查找设备 |
os_device_open() | 打开传感器设备 |
os_device_read_nonblock() | 读取数据 |
os_device_control() | 控制传感器设备 |
os_device_close() | 关闭传感器设备 |
该函数根据传感器设备名称查找设备,函数原型如下:
os_device_t *os_device_find(const char* name);
参数 | 说明 |
---|---|
name | 传感器设备名称 |
返回 | 说明 |
设备指针 | 查找到对应设备将返回相应的设备指针 |
OS_NULL | 没有找到相应的设备对象 |
该函数用于打开设备,函数原型如下:
os_err_t os_device_open(os_device_t *dev);
参数 | 说明 |
---|---|
dev | 设备指针 |
返回 | 说明 |
OS_EOK | 设备打开成功 |
OS_EBUSY | 设备忙 |
其他错误码 | 设备打开失败 |
该函数用于读取传感器接收到的数据,函数原型如下:
os_size_t os_device_read_nonblock(os_device_t *dev, os_off_t pos, void* buffer, os_size_t size);
参数 | 说明 |
---|---|
dev | 设备指针 |
pos | 读取数据偏移量,此参数传感器未使用 |
buffer | 缓冲区指针,读取的数据将会被保存在缓冲区中 |
size | 读取数据的大小 |
返回 | 说明 |
读到数据的实际大小 | 返回读取到数据的个数 |
0 | 需要读取当前线程的 errno 来判断错误状态 |
该函数用于对传感器设备进行配置,函数原型如下:
os_err_t os_device_control(os_device_t *dev, int cmd, void* arg);
参数 | 说明 |
---|---|
dev | 设备指针 |
cmd | 命令控制字 |
arg | 控制的参数 |
返回 | 说明 |
OS_EOK | 函数执行成功 |
OS_ENOSYS | 执行失败,dev 为空 |
其他错误码 | 执行失败 |
其中的 cmd 目前支持以下几种命令控制字:
#define OS_SENSOR_CTRL_GET_ID (0) /* Get device id */
#define OS_SENSOR_CTRL_GET_INFO (1) /* Get sensor info */
#define OS_SENSOR_CTRL_SET_RANGE (2) /* Set the measure range of sensor */
#define OS_SENSOR_CTRL_SET_ODR (3) /* Set output date rate. unit is HZ */
#define OS_SENSOR_CTRL_SET_MODE (4) /* Set sensor's work mode */
#define OS_SENSOR_CTRL_SET_POWER (5) /* Set power mode */
#define OS_SENSOR_CTRL_SELF_TEST (6) /* Take a self test */
该函数用于关闭传感器设备,函数原型如下:
os_err_t os_device_close(os_device_t *dev);
参数 | 说明 |
---|---|
dev | 设备句柄 |
返回 | 说明 |
OS_EOK | 关闭设备成功 |
OS_ERROR | 设备已经完全关闭,不能重复关闭设备 |
其他错误码 | 关闭设备失败 |
关闭设备接口和打开设备接口需配对使用,打开一次设备对应要关闭一次设备,这样设备才会被完全关闭,否则设备仍处于未关闭状态。
本例程为测试acce类型的sensor icm20608:
#include <drv_cfg.h>
#include <os_tick.h>
#include <stdio.h>
#include <shell.h>
#include <sensors/sensor.h>
static int sensor_acce_test(int argc, char *argv[])
{
int i;
char sensor_name[24];
struct os_sensor_data sensor_data;
if (argc != 2)
{
os_kprintf("usage:sensor_acce_test <sensor_name>\r\n");
return -1;
}
snprintf(sensor_name, sizeof(sensor_name) - 1, "acce_%s", argv[1]);
os_device_t *sensor = os_device_find(sensor_name);
OS_ASSERT(sensor != NULL);
os_device_open(sensor, OS_DEVICE_FLAG_RDWR);
for (i = 0; i < 10; i++)
{
os_device_read_nonblock(sensor, 0, &sensor_data, sizeof(struct os_sensor_data));
os_kprintf("sensor acce (%d, %d, %d)\r\n",
sensor_data.data.acce.x,
sensor_data.data.acce.y,
sensor_data.data.acce.z);
os_task_mdelay(1000);
}
return 0;
}
SH_CMD_EXPORT(sensor_acce_test, sensor_acce_test, "sensor_acce_test");
运行结果如下:
sh>sensor_acce_test icm20608
sensor acce (296, -642, 724)
sensor acce (385, 840, 150)
sensor acce (-183, -322, 912)
sensor acce (398, 1034, 194)
sensor acce (774, 325, -299)
sensor acce (894, 566, 204)
sensor acce (136, 274, -915)
sensor acce (448, 354, 494)
sensor acce (688, -463, -373)
sensor acce (833, 255, -166)