QCC512x QCC302x 使用I2C驱动外设(Bitserial)

1、旧接口 I2cTransfer

ADK6.x 版本对 i2c的库进行了重写,在 app 层不能够直接使用 #include <i2c.h> 里面的 API了。

uint16 I2cTransfer(uint16 address, const uint8 * tx, uint16 tx_len, uint8 * rx, uint16 rx_len);

开发底层库的话,依然可以调用 I2cTransfer,需要在 subsys7_config3.htf 指定 I2C pios ,第一个是 SCL、第二个是 SDA。类似于用 PSTool 的设置。

2、新接口 Bitserial

在 app 层调用的话,只能用 Bitserial API,需要包含此头文件 #include <bitserial_api.h>
使用 Bitserial 需要将此宏打开 #if TRAPSET_BITSERIAL,在 <build_defs.h> 该头文件内定义(默认打开)
Bitserial 同时支持 I2C 与 SPI 两种通信。
Bitserial 提供的功能有以下几个,常用为前三个。

API 功能
BitserialOpen 初始化 Bitserial 、分配 PIO(需由硬件控制);
返回一个打开成功的句柄(通常为1、255是打开失败)
BitserialClose 释放 Bitserial,传入的参数为 Open 返回的句柄
BitserialTransfer 传输函数:用于读与写,对I2C来说,会自动加入地址的读写位
BitserialWrite 写函数,BitserialTransfer 实现,可以不直接使用
BitserialRead 读函数,BitserialTransfer 实现,可以不直接使用
BitserialChangeParam 用于修改 i2C 地址,同一条总线上挂载 2个及以上 I2C 设备时会用到

2.1、I2C 初始化

I2C 初始化分为几步

  1. 设置 PIO 由硬件控制;
    PioSetMapPins32Bank(bank, mask, 0);
  2. 设置 PIO 功能;
    PioSetFunction(pio,func);
  3. 设置 PIO 方向;
    PioSetDir32Bank(bank, mask, 0);
  4. 设置 PIO 电平;
    PioSet32Bank(bank, mask, mask);
    PioSetStrongBias32Bank(bank, mask, mask);
  5. 设置 Bitserial 模式为 I2C;
    bsconfig.mode = BITSERIAL_MODE_I2C_MASTER;
  6. 设置 Bitserial 速度;
    bsconfig.clock_frequency_khz = prox->config->i2c_clock_khz;
  7. 设置 Bitserial 从地址;
    bsconfig.u.i2c_cfg.i2c_address = I2C_ADDRESS;
  8. 调用 BitserialOpen 并返回句柄。
    handle = BitserialOpen((bitserial_block_index)BITSERIAL_BLOCK_1, &bsconfig);

2.2、I2C 读写函数

可以直接调用 BitserialTransfer 来实现 I2C 的写操作。

static uint8 user_i2c_write_byte(bitserial_handle handle, uint8 reg, uint8 value)
{uint8 ret;uint8 txbuf[2];txbuf[0] = reg;txbuf[1] = value;ret = BitserialTransfer(handle, 0, txbuf, 2, NULL, 0);return ret;
}

同时可以实现连续写入多个寄存器操作。

static uint8 user_i2c_write_buffer(bitserial_handle handle, uint8 buffer[], uint16 buflen)
{uint8 ret;ret = BitserialTransfer(handle, 0, buffer, buflen, NULL, 0);return ret;
}

2.3、I2C 读函数

可以直接调用 BitserialTransfer 来实现 I2C 的读操作。

static uint8 user_i2c_read(bitserial_handle handle, uint8 txdat,uint8 rxbuf[], uint8 rxlen)
{uint8 ret;uint8 txbuf[1];txbuf[0] = txdat;memset(rxbuf,0,rxlen);ret = BitserialTransfer(handle, 0, txbuf, 1, rxbuf, rxlen);return ret;
}

3、总结

对比:

API 优点 缺点
<i2c.h> 1.处于更加底层的位置,底层库已经完成好初始化工作,调用的时候只需要在PSTool中选中下IO口,直接使用 I2cTransfer()即可
2.挂载 2个及以上 I2C 设备时,比较容易实现单独对某一设备操作
1.只能够操作I2C,不支持SPI(其实也不算缺点)
<bitserial_api.h> 1.更加抽象,通过一个API 同时支持 I2C 与 SPI 并且通过句柄来管理。
2.可以方便地设置任意通信速率。
1.对挂载 2个及以上的 I2C 设备时,需要手动判断地址并且修改(使用同一个句柄)
2.增加了初始化的步骤

I2C地址相关注意事项:
I2cTransfer:传入设备的地址为8位写地址。
Bitserial :传入设备的地址为7位地址。

QCC512x QCC302x 使用I2C驱动外设(Bitserial)相关推荐

  1. 【驱动】linux下I2C驱动架构全面分析

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  2. 十九、I2C驱动及应用

    一.概述 1.Linux主机驱动和外设驱动分离思想 外设驱动→API→主机驱动→板级逻辑--具体的i2c设备(camera,ts,eeprom等等)         主机驱动:根据控制器硬件手册,操作 ...

  3. linux i2c adapter 增加设备_Linux驱动之I2C驱动架构

    一.Linux的I2C体系结构 主要由三部分组成: (1) I2C核心 提供I2C控制器和设备驱动的注册和注销方法,I2C通信方法,与适配器无关的代码以及探测设备等. (2) I2C控制器驱动(适配器 ...

  4. linux下的I2C驱动记录(RK)

    现在做的是RK平台的I2C驱动,不是说linux每个外设对应一个设备文件吗?可是找了一下一直没找到,今天特别搞了一下.I2C设备是注册为platform平台驱动的. 下面是我用adb命令查看的 lin ...

  5. linux下I2C驱动架构全面分析

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  6. linux下i2c驱动笔记

    1. 几个基本概念 1.1. 设备模型 由 总线(bus_type) + 设备(device) + 驱动(device_driver) 组成,在该模型下,所有的设备通过总线连接起来,即使有些设备没有连 ...

  7. MSP430G2553 Launchpad 硬件I2C驱动

    一.USCI I2C 驱动介绍 对于MSP430G2553,硬件I2C由外设USCI(Universal Serial Communication Interface)提供.USCI又分为USCI_A ...

  8. 【正点原子MP157连载】第四十章 Linux I2C驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  9. 基于阿里平头哥的单片机软、硬件i2C驱动oled

    基于RiskV的阿里平头哥MCU开箱文章之软硬件i2C驱动oled 12864 Risk-V简介 国产单片机及开发环境CDK iic简介 iIC代码移植详细介绍 # stm32 iic: # 向国产单 ...

最新文章

  1. PCL中分割_欧式分割(1)
  2. coco关键点标注json_COCO 数据集中目标检测标注说明
  3. 除了Kaggle,还有哪些高质量的数据科学竞赛平台?
  4. 动态刷新_iPhone 12:120Hz动态刷新屏幕加持!iPhone X无奈价崩
  5. PWN-PRACTICE-CTFSHOW-4
  6. 使用Mybatis Generator结合Ant脚本快速自动生成Model、Mapper等文件的方法
  7. HDU 2844 Coins (多重背包)
  8. 【Axure原型】新闻资讯客户端APP原型 今日头条同类APP实战原型
  9. 电脑公司Windows7_X86旗舰版V0911
  10. GMM估计分析步骤及结果解读
  11. Please restart Word to load MathType addin properly;运行时错误53,文件未找到MathPage.WLL
  12. Daftart.ai:人工智能专辑封面生成器
  13. 为什么说交换机可以隔离冲突域?
  14. 报错:Expected singleton
  15. ssh-keygen处理gitee
  16. 2021计组和微计-背下来就能拿分的知识总结
  17. Win10开启telnet功能
  18. Python 解释器
  19. dell 各系列服务器区别,戴尔全新12G服务器全系列概述介绍
  20. 公司类型其他有限责任公司什么意思

热门文章

  1. 有效沟通bic法则_南宁人际沟通培训
  2. sublime 实现浏览器预览功能
  3. len函数python返回值类型_python的len函数为什么报错
  4. 东大18秋计算机基础在线作业3,东大18秋学期《计算机应用基础》在线作业3.pdf...
  5. 降噪效果好的蓝牙耳机该怎么选?盘点四款高品质降噪蓝牙耳机
  6. Retrofit2+Rxjava2+okHttp 网络框架封装
  7. 114个ChatGPT全网最热话题
  8. 【游戏建模模型制作全流程】ZBrush蜥蜴模型雕刻教程
  9. super是不是java中的标识符_java关键字super和this是什么?有什么区别?
  10. 一加5t ,安卓p系统卡在更新页面,安卓p降级教程(一加5t测试通过)