MT6572平台加入呼吸灯功能——控制芯片SN3112-12简介

题外话:从Android mmi层转战驱动已达3月,作为方案公司的程序猿,对于MTK的驱动,最大的体会:填表,永无止境;不会填了,请call FAE。所以,时日匆匆,待到年华已逝,填表登峰造极之时,想要转行,不禁长叹:天地苍茫,任我彷徨,但思转行,余生何往... ...ok,闲话休提,获取知识不应只是工作的驱使,咱要有对知识的兴趣和渴望。填表不给机会,咱自己去探索。这三月中最大的收获,莫过于学习了开发一个模块,如何从底层到上层。现以呼吸灯为例,分段记录下开发过程。这里先介绍一下本实验待实现的简单功能和所用到的主要芯片。

    本实验所实现的简单功能:应用程序apk界面仅包含一个SeekBar控件,通过拖动进度条来控制Led等的亮度(与调Lcd背光亮度功能类似)。后面几篇会按照“驱动——HAL——JNI——Framework——APP”的开发过程进行叙述。下面先介绍下本实验用到的呼吸灯控制芯片。

一  呼吸灯控制芯片SN3112-12简介

    SN3112-12是矽恩微电子的一款12路呼吸灯驱动芯片,工作于2.7V~5.5V,每路单独256级亮度可控。单路最大输出电流可通过一个外部电阻设定,最大限制电流为38mA。主控器件(这里为MT6572)通过I2C接口对其进行编程控制,通过将SDB脚拉低或软件设置可关断芯片,进入低功耗模式(对手持设备,省电必须考虑)。SN3112-12的从地址为0xa8.如下为芯片典型应用电路图:

单路最大输出电流由图中电阻R_EXT控制,计算公式为:

                                                      I_max  =  x * V_EXT / R_EXT

其中x = 58.5,V_ENT = 1.3V。如上,R_EXT = 3.3k欧时,I_max = 58.5 * 1.3 / 3300 = 23mA。

注意:PCB布线时,芯片需原理手机天线放置,防止天线对芯片辐射造成影响。

    SN3112-12采用QFN-20封装,其20个引脚说明如下:

芯片其他详细的电气特性请查找芯片datasheet。

二  I2C通信接口简介

    芯片既然是I2C接口通信,这里先简单介绍下I2C通信协议。

    2.1 I2C简介   

    I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线通过串行数据(SDA)线和串行时钟 (SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别,而且都可以作为主设备,但是同一时刻只能有一个设备被允许作为主设备。主设备是初始化总线的数据传输并产生允许传输的时钟信号 的器件,此时,任何被寻址的器件都被认为是从设备。其特性如下:

    1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL;                                                                                                                                                                                 

    2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器;

    3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;

    4、串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s;

    5、连接到相同总线的IC 数量只受到总线的最大电容400pF 限制。

    2.2 位传输

    I2C每传输一个数据位,会产生一个时钟脉冲,逻辑0(低)和逻辑1(高)的电平不是固定的,它由电源VCC的相关电平决定。在传输数据的时候,SDA线必须在时钟高电平的时候保持稳定,SDA的高或低只有在SCL为低时改变。如下为I2C位传输数据有效性图:

    2.3 起始停止位

    SCL是高电平时,SDA线从高到低切换,该情况表示起始条件;SCL是高电平是,SDA线从低到高切换,该情况表示终止条件。起始和终止条件一般由主机产生,总线在起始条件后被认为处于忙状态,在终止条件的某段时间后被认为处于空闲状态。示意图如下:

    2.4 数据传输

    发送到SDA线上的字节格式必须为8位,每次传输发送的字节数量不受限制,每个字节后必须跟一个响应位,字节发送最先发送最高位(MSB)。

    数据传输必须带响应,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器释放SDA 线(高)。在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。如下为传输示意图:

    2.5 寻址方式

    第一个字节的头7 位组成了从机地址,最低位(LSB)是第8 位,它决定了传输方向。第一个字节的最低位是“0”,表示主机会写信息到被选中的从机;“1”表示主机会向从机读信息,当发送了一个地址后,系统中的每个器件都在起始条件后将头7 位与它自己的地址比较,如果一样,器件会判定它被主机寻址,至于是从机接收器还是从机发送器,都由R/W 位决定的。SN3112-12的器件地址为“1010 100”,由于SN3112-12只支持写操作,所以最低位固定为0,即组合成的地址字节固定为“1010 1000”,即0xa8。普通7位地址传输方式如下:

    2.6 SN3112-12芯片的I2C通信介绍

    SN3112-12使用固定的8位从地址“1010 1000”,该芯片只支持写操作。下图为传送时序图:

在SCL为稳定的高电平时,SDA为闭锁状态并且在不使用的时候保持高电平。“开始”信号由SCL保持高电平时SDA拉低产生的,首先传送8位从地址,在最后一位传输出去后,主控器件会检测SN3112-12的应答信号。主控器件会通过上拉电阻释放SDA为高电平,然后是SCL发送一个脉冲,如果SN3112-12正确接收到8位数据,在SCL的脉冲期间,它将使SDA拉低。如果SDA不为低,则表示数据没有成功被接收。主控器件会发送一个“停止”信号并中断数据传送。SN3112-12从地址成功发送后,接下来发送寄存器地址,最后发送寄存器数据。每个字节的发送过程是一样的。如下为典型方式写入SN3112-12:

还有一种地址自加的方式:如果有多个数据要传入SN3112-12,只需发送第一个待写入的寄存器地址,在SN3112-12接收数据期间,寄存器地址会自动加1,下一个数据将写入新的寄存器中,如此继续,直到I2C写入停止信号。如下为地址自加方式:

三  SN3112-12寄存器介绍

    下表为SN3112的寄存器定义:

    3.1 关断寄存器(00h)

   

    关断寄存器用来设定软件关断SN3112-12。SSD位置1时为标准工作模式,置0为关断SN3112-12。

    3.2 PWM寄存器(04h~0Fh)

   

    PWM寄存器对每路Led设置256级亮度可控。PWM设置Led平均电流值 I_out = (x / 256) * I_max。其中x为PWM寄存器值。04h~0Fh对应12路led。

    3.3 LED控制寄存器(13h~15h)

   

    LED控制寄存器存储每路Led开关状态。OUTx位为0时表示关闭,为1时表示开启。

    3.4 数据更新寄存器(16h)

    发送给PWM寄存器和Led控制寄存器的数据会被存储到临时既存器里,写入任意8位数据到数据更新寄存器里才可使数据生效。

    3.5 复位寄存器(17h)

    写入任意8位数据到复位寄存器中可使所有寄存器数据回复到默认值。

四  SN3112-12应用说明

    4.1 PWM控制

    通过设置PWM寄存器(04h~0Fh)值来调节每路LED亮度。连续写入数据是PWM值升高或降低可达到呼吸效果。

    4.2 LED呼吸灯非线性校正

    SN3112-12内部实现线性256级灰度PWM调光,由于人视觉对亮度的误差,电流线性增加时,视觉上会感觉到LED灯开始时亮度变化快,然后进入到亮度饱和的问题。故在呼吸时建议采用伽马补偿方法,达到视觉效果的线性。如下为32级亮度的伽马补偿数据:

五  其他

    主控芯片MT6572这里就不多做介绍了,本实验中,采用了GPIO模拟I2C通信,SN3112-12与MT6572的连接如下:

如图,这里只需注意3个脚即可,SDB,SCL和SDA,分别用了MT6572的GPIO141,GPIO101和GPIO138脚。编程过程只需对这三个脚进行操作即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值