找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

高通蓝牙ADK - I2C使用

2020-8-14 22:09| 发布者: 大大通| 查看: 3904| 评论: 3|来自: 大大通

摘要: Biu~小伙伴们大家好, 今天我们聊聊I2C的使用。在开发过程中多多少少会加入一些外围传感器,补充一下功能,提升一下用户体验,扩展一些推广点,增大一些功耗,忽悠多一些用户,卖多一些产品。 其实传感器的确可以给 ...

小伙伴们大家好, 今天我们聊聊I2C的使用。在开发过程中多多少少会加入一些外围传感器,补充一下功能,提升一下用户体验,扩展一些推广点,增大一些功耗,忽悠多一些用户,卖多一些产品。

其实传感器的确可以给用户带来更好的使用体验。例如,利用接近传感器识别戴上耳机和取下耳机,从而去自动暂停播放音乐,或接听转移通话。又例如,用触摸或敲击替代传统按键,可以更轻松触发控制功能。同时利用这种传感器替换实体按键,可以更好的实现高级版的防水功能,让你在运动的时候,不用担心耳机会被汗液、体液和唾液浸坏。

一般传感器都会使用I2C作为通讯协议(有的使用SPI,下篇讲解SPI),那么新版本的I2C该如何使用呢?其实这个和之前6.x版本是一样的,熟悉6.x开发的童鞋们可以略过本篇博文。那么了解这的小编带不了解的小伙伴来了解了解QCC302x、QCC512x、QCC304x和QCC514x系列的I2C使用,这些芯片的使用都是一样的。都是只能做I2C的master,都是最高400Kbit/s的传输速度,都是用同样的函数编写。

在默认代码使中,是有两个传感器的驱动代码的,分别是加速度传感器adxl362和接近传感器vncl3020。同时这部分代码也是有完整的传感器处理逻辑,可以实现戴上耳机和取下耳机,自动暂停播放音乐或接听转移通话。那因为封装等各种原因,客户一般选自己想要的去替换他。我们AITg的QCC系列开发板也集成了几颗传感器,并完成驱动,有兴趣可以点击链接前往购买体验(AITg高通蓝牙开发板)当然您有别的心仪对象,也可以参考默认参考代码去完成驱动。这里小编也以默认参考代码来讲解如何使用I2C驱动。

我们看到vncl3020.c文件中的appProximityClientRegister 这是为接近传感器注册的地方,就是给传感器配置使能,并记录一些环境变量,好让后续系统能处理。这里我们主要看两个函数先。一个是IC的使能vncl3020Enable,另一个是中断处理的注册InputEventManagerRegisterTask

首先在IC使能里,主要做了I2C IO、中断IO的初始化和I2C功能的初始化。函数前面有个配置的结构体,是用来配置每个I2C IO的具体功能,config参数是文件开头的结构体定义的参数


IO初始化完成之后,就到了I2C的配置。这里的bitserial模式选择为I2C master mode还有另外一种模式是SPI master mode(这个在下篇讲解),往下就是配置I2C的时钟频率和I2C地址,最后把这些参数传入BitserialOpen去开启了一个bitserial通讯功能,并获取到返回来的一个handle。

WARNING,THIS PART IS ABSOLUTELY IMPORTANT

注意了,接下的是重点知识

及实D啊!跟住落嚟好鬼重要嘎

  1. BitserialOpen函数返回的handle是用作后续读写操作的参数,并且这个handle是绑定一个I2C地址的,即是说,后续读写不再需要在开头加入地址
  2. BitserialOpen函数中有个参数BITSERIAL_BLOCK_1,这类参数有两个,另一个是BITSERIAL_BLOCK_0 简单来说就是bitserial这个接口最多只能开启两个
  3. 参数BITSERIAL_BLOCK_1是和IO设置一起的,前面I2C IO初始化是用到了BITSERIAL_1_CLOCK_OUT 等参数,如果换成BITSERIAL_BLOCK_0就要换成BITSERIAL_0_CLOCK_OUT 等参数,即是把1换成0,和block一一对应

那有小伙伴就问了,一个handle绑定一个i2C的地址,最多只有两个block也就是两个handle可以用,这不符合I2C的用法啊!!

是的,I2C是可以在一条通讯总线上挂N个设备协议,这样做就不符合他的设定了。这里也是可以一个handle和多个I2C设备通讯的,这需要改地址。不是简单的再执行一个BitserialOpen 就能改地址,而是要BitserialChangeParam 去改变。例如改地址:BitserialChangeParam (handle,BITSERIAL_PARAMS_I2C_DEVICE_ADDRESS,address, BITSERIAL_FLAG_NO_STOP)

关于读写,根据他默认参数即可,把对应的handle和寄存器地址和数据传进去,就可以完成读写

另外一个是中断,vncl3020InterruptHandler 是中断响应函数,里面做接收到中断IO的变化之后做的处理。PioMonitorRegisterTask 就是将中断IO和中断响应函数关联起来的。有了使能和中断响应,这个I2C的使用都不成问题了


来源:https://www.wpgdadatong.com/cn/blog/detail?BID=B1760
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

5

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (5 人)

相关阅读

发表评论

最新评论

引用 格调 2022-2-17 16:03
很牛很有用 感谢楼主分享
引用 Zebshy. 2021-11-11 15:07
使用I2C通信的时候,不要要什么起始信号,应答信号什么的吗?
引用 Gilbert_Arenas 2020-9-14 17:21
博主,可以出一个高通ADK 3040或者3020的GPIO中断的使用方式么?看了一圈也没有看到要如何去调用

查看全部评论(3)

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-20 08:53 , Processed in 0.125288 second(s), 33 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部