小伙伴们大家好, 今天我们聊聊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啊!跟住落嚟好鬼重要嘎
那有小伙伴就问了,一个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 |
GMT+8, 2025-5-1 00:00 , Processed in 0.280703 second(s), 17 queries , Gzip On, MemCached On.
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.