硬件操作的说明:
1. 使用晶联电子的1602A LCD的I2C通信接口,其工作电压是3.3V (所以CSR867x I2C信号有电平也要就要是3.3V,若是1.8V则会驱动失败
2.CSR8670/8675的default的I2C端口是PIO6 和PIO7;
3. 要注意的 PIO6/I2C_SCL、PIO7/I2C_SDA 需要接上拉电阻,其阻值一般是4.7K~6.8K就可以了。
软件操作的说明:
1. CSR ADK软件开发包 提供的了一个I2C控制的涵数;
uint16 I2cTransfer(uint16 address, const uint8 *tx, uint16 tx_len, uint8 *rx, uint16 rx_len);
这个涵数,共有4种用法;在这里简明说一下,具体的详细说明见i2c.h文件
1.1)只发送数据
1.2)只接收数据
1.3)发送数据再接收数据
1.4)即不发送数据 也不接收数据
2.从CSR官方资料,可知CSR8670/CSR8675 只能做master角色, 不能做Slave角色
3.有关I2C的PSKEY有如下两个,都是通过PSTOOL工具来设置,用为配置Clk的频频,标准100kHz, 最大400kHz
PSKEY_I2C_CONFIG
PSKEY_I2C_SLOWDOWN
4. 在CSR提供的sink工程 中其实已提供了一个I2C驱动LCD的例子。
LCD的驱动控制芯片是ST7032。 与我们的1206LCD相适
在sink中的工程例子中,文件sink_display.c调用 底层库(Display)提供的API涵数;
DisplayInit() //初使化作用,通知Lib去与设备沟通,
// 并返回消息DISPLAY_PLUGIN_INIT_IND到 sink应用层
// 从这个消息的附加数据,可知I2C是否沟通成功。
DisplaySetState () //显示 状态
DisplaySetText() //显示文件内容,指定行(0或1),是否滚动显示
DisplaySetIcon() //显示 Log
Display库所在位置:C:\ADK_CSR867x.WIN4.2\src\lib
所有处理的最终涵数都是,调用涵数lcd_write(uint8 rs, uint8 data);
而在此涵数中,又是调用就是上述所谈到的这个关键涵数 I2cTransfer(…)
实际操作:
4. 修改库中的LCD默认I2C地址,为1602LCD的地址(0x3C);
在文件是display_plugin_cns10010.c文件中,如下所示
只修改这一句,原因LCD的初使化驱动全完兼容 。然后再保存;
6 如下选择,对修改过的库进行Compile. 会出现command窗口,会花一点时间。若无error就自动关闭退出。
7 启动ADK4.0,打开headset 工程。
8 修改工程属性,允许LCD显示功能有效,即将宏Display选择使能。
9 按F7键 来Compile, 无error后,再按F5建,烧录到芯片并Runing;
10 按MFB开机键进行开机. 大功告成
CSR867x学习交流群:743434463
高通蓝牙技术交流群:713094735
科飞开发板支持群:763757182 (这个号 要凭 单号才可以添加的)