【蓝牙数据采集模块】-02-Sensor Controller 编写CC2650STK外设驱动

上次说到把所有的传感器模块在Sensor Controller中实现读写,并封装驱动。

先来看一下CC2650STK的原理图

用红色方框标记的DIO_0~DIO_7, DIO_23~DIO_30是可以通过Sensor Controller去控制的。后面几个暂时用不到,前面的包括了一个I2C接口,和两个BUTTON按键管脚,以及一个REED干簧管管脚。剩余的TMP RDY,AUDIO,MPU INT就先不管了。

现在开始给I2C接口和3个输入管脚编写驱动Sensor Controller下的驱动与数据采集程序。

SDA和SCL的I2C接口下面接入了4个传感器芯片,分别是OPT3001光照、BMP280气压、TMP007红外温度、HDC1000湿度。这些传感器的datasheet和驱动都可以在官方网站上下载到,参照官方的驱动程序,在Sensor Controller Studio中编写对应的驱动程序。3个输入信号,另外创建一个TASK编写对应的程序,读取管脚的输入状态。 I2C中只用到了数据延迟操作,而输入信号用到了定时器中断功能。

最终工程的结构如下图:

用到了5个管脚,I2C Sensors任务用到了两个引脚, IO Sensors任务用到了三个引脚。

最后生成的驱动代码所占用的RAM资源达到了95.6%,基本用完了。若需要加其他东西,只能精简驱动程序代码了,比如去掉一些初始化步骤等等。

在编写驱动中发现HDC1000的温湿度读取I2C通信过程相对较为特殊,需要先触发测量(写访问,写0个字节到温度寄存器),读取等待测量完成(循环读访问直到有ACK信号),读取测量结果(温度2个字节、湿度2个字节)。光用文字说不太清楚,需要详细看手册去了解这个。  中间提到的读取等待测量完成(循环读访问直到有ACK信号),在我这里测量总是第353次才有ACK返回,不知道有什么具体的原因。

用TASK Testing工具测试I2C Sensors任务的效果,可以看到Sensor Controller已经能够读取到所有关心的数据了。

IO Sensors任务中的驱动代码相对来说简单很多,有兴趣的可以看源代码。

~~大功告成,其实花了很多时间来调I2C的驱动,主要原因就是上面提到的HDC1000循环读取的关系,不过最后也算是终于搞定了。

该工程的源码可以在下面链接上看到。

https://coding.net/u/vacajk/p/Exploration_Sensors/git

下一步就是在M3内核中来实现与Sensor Controller互相通信交互的功能。

时间: 2024-10-18 18:43:21

【蓝牙数据采集模块】-02-Sensor Controller 编写CC2650STK外设驱动的相关文章

【蓝牙数据采集模块】-00-Sensor Controller 功能介绍

一. CC2650芯片内部的结构框图如图,内部包含: 一个Cortex-M3主控制器,用来做整个芯片的功能与任务实现 一个Cortex-M0射频控制器,用来驱动RF相关电路 一个Sensor Controller,可以用来在主控制器睡眠时实现传感器数据的采集,以降低系统整体功耗. 由图中我们可以看到,Sensor Controller可以直接控制的模块包括: 1.模拟量采集,2.比较器,3.SPI和I2C接口,4.恒流源,5.定时器,6.2KB SRAM 不仅如此,Sensor Controll

【蓝牙数据采集模块】-00-开始

去年的时候自己发神经,在TI官网上买了几个CC2650 SensorTag开发套件,并申请了一些样片.想着玩一玩蓝牙通信,但是从接收到从美国.德国寄过来的联邦快递后,却直接让他们箱底吃灰了.越想越不爽,还是拿出来搞一搞吧. 开发的平台如表格所写 计算机 Windows10 8GB     开发套件 CC2650STK 1.3.0   仿真器 Debugger DevPack 1.2.0   开发软件 CCS 6.1.1 1.安装前关闭所有杀毒软件和防火墙 2.全部安装到默认路径,否则编译时会有问

Windows Server 2012 R2超级虚拟化之九 数据中心漫步App Controller 2012 R2

Windows Server 2012 R2超级虚拟化之九 数据中心漫步App Controller 2012 R2 App Controller 提供一般的自助服务体验,可以帮助你在私有云和公有云内轻松配置.部署以及管理虚拟机和服务.注意App Controller 2012 R2只能连接到SCVMM 2012 R2 说明: App Controller 2012 R2的安装条件与App Controller 2012一样.本次实验环境基于实验八 1. 准备一台Windwos Server 2

关于如何编写linux设备驱动

关于如何编写linux设备驱动 1)首先确定硬件接口使用的总线,2)然后确定要实现的功能,是网卡.sensor还是什么?再确定对上层应用暴露的接口, 从而选择子系统,例如iio.input子系统等.由于linux只有字符设备.块设备.网络设备三种设备,其实iio.input子系统都是字符设备,只是它们帮你封装好了字符设备的file_operations和Major设备号了,另外提供统一的sysfs接口(一类sysfs接口).你只需要按照子系统要求注册进子系统就行.子系统就像应用和你驱动之间的fr

编写linux设备驱动的注意事项之一

编写linux设备驱动的注意事项之一 当然写驱动,你得清楚上层调用是否导致存在函数重入.什么执行context下(1. 中断.2. 软中断.3. tasklet(软中断的一种). 4. timer(基于软中断实现).5. hrtimer (软中断或硬中断环境下执行) .6. workqueue(也是kernel thread).7. kernel thread.8. 普通thread的内核态下)会访问此函数和此资源,需要什么样的"同步机制"保护. 你利用子系统(例如input子系统)的

040 RabbitMq及数据同步02

1.Spring AMQP (1)简介 Spring有很多不同的项目,其中就有对AMQP的支持: Spring AMQP的页面:http://spring.io/projects/spring-amqp 注意:Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协议的具体实现,也是目前的唯一实现.底层使用的就是RabbitMQ. (2)依赖和配置 添加AMQP的启动器: <dependency> <groupId>org.springframewor

导出数据为Excel文件---Controller

@Controller @RequestMapping("/vehmileage") public class VehMileageController extends BaseController{ private static final Logger LOG=Logger.getLogger(VehMileageController.class); private static final String FILE_NAME="里程导出"; private st

【Android】利用安卓的数据接口、多媒体处理编写内存卡Mp3播放器app

通过调用安卓的MediaPlayer可以直接完成Mp3等主流音频的播放,同时利用ContentResolver与Cursor可以直接读取安卓内在数据库的信息,直接获取当前sdcard中所有音频的列表,无须像<[Android]内存卡图片读取器,图库app>(点击打开链接)一样利用原始的Java代码去遍历整个sdcard卡,直接调用安卓固有的类既便捷又快速.最后,读取出来的Mp3可以通过适配器直接加载到ListView列表,做出如下所示的内存卡Mp3播放器app效果.本app在自己的真实的16G

大数据笔记02:大数据之Hadoop的生态系统和版本

1.Hadoop的生态系统: (1)图1: (2)图2: 图1 和 图2 都是形象说明了Hadoop的生态圈. 2.举例介绍Hadoop生态圈的小工具: (1)Hive工具(中文意思:小蜜蜂) 利用Hive这个工具,不用编写复杂的Hadoop程序,只需要编写一个SQL语句,Hive就会把你编写的SQL语句转化为Hadoop任务去执行. 这样降低使用Hadoop的门槛. (2)hbase 存储结构化数据的分布式数据库 图1: 图2: (3)zookeeper(中文意思:动物管理员) zookeep