前言

本文记录调试高通平台某I2C 器件通讯出现异常,尝试修改I2C 时钟速率时所做的记录。

平台:MSM8953。

系统:Android 9.0

分类:I2C CLK

结论

先说结论,经过分析以及验证,平台支持的I2C特性如下。

默认速度:100K。

支持速度:100K、400K、1M

支持范围:50K ~ 1M

寄存器描述

通过配置I2C CLK的高低电平持续时间的寄存器,可决定CLK的周期和速率。

寄存器描述如下

从这里可以看到,由于高低电平的配置寄存器都是8bit的,最大值255。

按照当前时钟源19.2M、fs_div = 2hs_div、的规律,最低时钟速率为:

clk-Min = 19.2 M / (255 + 255/2 + 6 ) = 49.42K,取整为50K

计算公式

I2C_FS_CLK = I2C_CLK/(fs_div+hs_div+6)

这里, I2C_CLK 是19200000,19.2M

100K CLK 配置举例:

19.2M (CXO) /100K(transfer rate) = fs_div+hs_div+6

一般来说 fs_div = 2hs_div

这就是为什么默认100K的配置是: 124/62,fs_div+hs_div+6 = 192 。

代码修改

dts 节点配置

kernel\msm-4.9\arch\arm64\boot\dts\nwy\XXX_msm8953.dtsi

I2C 节点修改为50K 配置如下:

 i2c_3: i2c@78b7000 { /* BLSP1 QUP3 */compatible = "qcom,i2c-msm-v2";#address-cells = <1>;#size-cells = <0>;reg-names = "qup_phys_addr";reg = <0x78b7000 0x600>;interrupt-names = "qup_irq";interrupts = <0 97 0>;
-       qcom,clk-freq-out = <400000>; // 默认400K
+      qcom,clk-freq-out = <50000>;  // 修改为 50K 输出qcom,clk-freq-in  = <19200000>;clock-names = "iface_clk", "core_clk";clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,<&clock_gcc clk_gcc_blsp1_qup3_i2c_apps_clk>;pinctrl-names = "i2c_active", "i2c_sleep";pinctrl-0 = <&i2c_3_active>;pinctrl-1 = <&i2c_3_sleep>;qcom,noise-rjct-scl = <0>;qcom,noise-rjct-sda = <0>;qcom,fs-clk-div = <252>;         // clk High 电平持续时间,非必须项qcom,high-time-clk-div = <126>;  // clk Low  电平持续时间,非必须项qcom,master-id = <86>;dmas = <&dma_blsp1 8 64 0x20000020 0x20>,<&dma_blsp1 9 32 0x20000020 0x20>;dma-names = "tx", "rx";status = "disabled";};

I2C 驱动文件新增clk table

8953_APP_P\kernel\msm-4.9\drivers\i2c\busses\i2c-msm-v2.c

这个表是当前支持的I2C速率,及对应高低电平持续时间参数。【参数配置参考上一个章节】

如果没有需要的速率,则新增一组,如新增50M速率。

/** divider values as per HW Designers*/
static struct i2c_msm_clk_div_fld i2c_msm_clk_div_map[] = {
+  {KHz(50), 252, 126},{KHz(100), 124, 62},{KHz(400),  28, 14},{KHz(1000),  8,  5},
};

参考文献

80-NU767-1_LINUX BAM LOW-SPEED PERIPHERALS CONFIGURATION AND DEBUG GUIDE.pdf

柳絮纷飞里看见了故乡

msm8953-配置I2C 速率相关推荐

  1. MSM8953配置I2C及SPI

    此次完成的任务是要使能高通8953平台的i2c和spi,主要做的工作就是在设备树文件中添加节点信息.主要的工作在于对设备树文件的修改,主要修改了msm8953-pinctrl.dtsi和msm8953 ...

  2. SDM660 开机xbl中配置I2C

    之前文章介绍了怎么在uefi中配置I2C ,如果我们需要更早一点的时间点配置I2C ,比如说项目中使用I2C 充电IC替代高通默认的充电IC ,那么就等不到在uefi中配置I2C了 ,需要再更早的时间 ...

  3. 5.常见i2c地址_修改i2c速率

    一. 如何修改i2c 速率 1. 在设备驱动代码中i2c_probe(),添加: spin_lock(&kdsensor_drv_lock); g_pstI2Cclient->timin ...

  4. Qcom 平台 LK 阶段配置 I2C

    qcom平台LK 阶段配置IIC 版本号:V 1.0 作者:Leo 目录 目录... 1 前言... 4 1.      确定硬件... 4 2.      LK I2C 函数接口... 5 2.1 ...

  5. 高通msm8953平台I2C分析

    今天遇到了个I2C不通的问题,用的是I2C_8 msm8953.dtsi i2c8 = &i2c_8;i2c_8: i2c@7af8000 { /* BLSP2 QUP3 */compatib ...

  6. STM32CubeMX配置I2C读取DS3231

    使用HAL库操作DS3231 因为DSP2这个项目需要计时间功能所以封装了一下这个芯片的程序 硬件设计 我将它接到了I2C1对应的IO口是(SCL > PB6 | SDA > PB7) 程 ...

  7. Linux I2C工具查看配置I2C设备【转】

    转自:http://blog.chinaunix.net/uid-26895763-id-3478882.html 在處理音訊相關的問題時,我通常會找個方法來讀寫codec中register的值.幸好 ...

  8. ethtool -s 配置网卡速率双工的流程与 netdevice 的 user_ns 结构

    strace 跟踪 ethtool -s 执行过程 socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 ioctl(3, SIOCETHTOOL, 0x7ffdb4 ...

  9. A 平台I2C 的使用

    下面分享一下amlogic 平台I2C 使用的一点心得. I2C controllers 概述 I2C 是Inter-Integrated Circuit的缩写,发音为"eye-square ...

最新文章

  1. python对文件的读操作方法有哪些-Python文件常用操作方法
  2. ECCV 2018论文解读 | DeepVS:基于深度学习的视频显著性方法
  3. java人力资源管理系统设计_人力资源管理系统——《Java Web程序设计》课程设计...
  4. 如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (上)
  5. 激光炸弹(BZOJ1218)
  6. android 号码查联系人,Android联系人查询
  7. layui 渲染select下拉选项 ,日期控件的用法
  8. HttpHandler和HttpModule 心得介绍
  9. 【Mac】setremotelogin: Turning Remote Login on or off requires Full Disk Access privileges.
  10. pure CSS3 triangle icon
  11. Psychology
  12. php 过滤微信符号昵称,PHP处理微信昵称特殊符号过滤的方法
  13. 美学心得(第二百四十一集) 罗国正
  14. 无人船水下地形测量的应用及优势
  15. 亚马逊广告api v2版php扩展库
  16. 成都电子科技大学深圳校区计算机学院导师简介
  17. 两个乒乓球队进行比赛,各出3人。甲队为A,B,C三人,乙队为X,Y,Z3人。已抽签决定比赛名单。有人像队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛手的名单
  18. sort() 函数的用法
  19. 为何工作让你没有成就感
  20. SurfacePro4_BMR_115_11.347.0.zip百度网盘下载连接

热门文章

  1. Synopsys Formality 2018操作流程
  2. 服务器运行时将杀毒软件关掉,云服务器的速度性能优化之一(关闭Windows杀毒软件及无关服务及程序)...
  3. 明解C语言(入门篇)第二章
  4. Steam32寄存器实现流水灯
  5. android指南针程序,如何在Android上制作精确的指南针
  6. 如何用深度学习生成图片(GAN, pix2pix, CycleGAN和pix2pixHD)
  7. win10计算机属性管理打不开,win10系统此电脑属性打不开怎么办
  8. Android 模拟器横屏竖屏切换设置
  9. 关于GMac和FLOPs讨论
  10. 计算机实用教学,【实用】计算机教学工作计划3篇