msm8953-配置I2C 速率

2023-11-20

前言

本文记录调试高通平台某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

柳絮纷飞里看见了故乡

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

msm8953-配置I2C 速率 的相关文章

随机推荐

  • Qt学习(三)—— lambda表达式

    lambda表达式 lambda 表达式是 C 11 新增的新特性 用于定义并创建匿名的函数对象 在 Qt 中配合信号一起使用 使用lambda表达式的好处在于不用定义槽函数 也不用指定信号接收者 为了使用 lambda 表达式 需要在项目
  • Flutter - okToast封装

    demo 地址 https github com iotjin jh flutter demo 使用版本 加载框 https pub flutter io cn packages oktoast readme tab oktoast 2 3
  • 【70】爬楼梯问题求解

    题目描述 思路分析 当阶数为 1 时 解法为 1 当阶数为 2 时 解法为 2 当阶数为 3 时 解法为 3 当阶数为 4 时 解法为 5 很明显可以分析出 一下公式 代码实现 递归法 class Solution public int c
  • MATLAB实现遗传算法求解n维变量函数的最小值问题

    一 问题简述 本文以遗传算法求解30维变量函数的最小值问题举例 式中 且 二 遗传算法概述 遗传算法 genetic algorithm GA 是一种仿效生物界中 物竞天择 适者生存 演化法则的进化算法 将问题参数编码为染色体 利用迭代的方
  • cv2.minAreaRect()

    功能 求出在点集下的最小面积矩形 输入 格式 points array shape n 1 2 解释 其中points是点集 数据类型为ndarray array x1 y1 x2 y2 xn yn 输出 格式 rect tuple x y
  • Centos7 安装 postgreSQL

    谷明科技 专注于大数据和人工智能领域的创新者 PostgreSQL 介绍 PostgreSQL 是一个开源且强大的关系型数据库 且具有多平台扩展能力 不同于传统的关系型数据库 例如mysql sqlserver等 PostgreSQL使用S
  • this调用本类的其他构造器

    Student类 package Java project 1 public class Student private String name private String schoolName public Student public
  • javascript的函数中this指向判断

    前言 最近在写 React 项目 然后补习了下 es6 的 class 发现 实例方法被赋值后 this 指向 undefined 这里对 this 指向作一次总结 一 通过 函数的 调用方式 来判断 this 指向 1 函数名 通过 函数
  • Zero-ETL、大模型和数据工程的未来

    编者按 本文探讨了数据工程领域的未来趋势和挑战 以及其不断变化 甚至经常出现 重塑 的特点 在数据工程领域 大数据的性能 容量提升总是有一定的上限 每一次进步都会带来一定的技术提升 从而提高上限 但是很快我们就能到达这个上限 直到下一次技术
  • 【Bugfix】flutter GetX 使用 Obx 监听 GetxController 时,页面退出 GetxController 无法销毁

    背景 我的页面数据全来自 GetxController 每次进入时需要重置数据 但 GetX 似乎把 GetxController 保留了 下次在进入页面直接复用了之前的数据 导致数据混乱 尝试 一下调用均不能销毁 GetxControll
  • 设置windos电脑开机自动启动chrome浏览器,并且打开指定网页

    需求 web项目设置windos电脑开机自动启动chrome浏览器 打开指定网页地址 并设置为全屏显示 解决 使用windos的bat脚本 设置为开机自启动 代码如下 echo off cd d dp0 title Chrome taskl
  • Unity中UI组件

    一 Canvers 画布组件 Canvers下面是添加Button和Image组件 Rect Transform 1 Position 坐标位置 2 Width Height 高宽尺寸 3 Anchors 锚点 4 Pivot中心点 即UI
  • VRRP和DHCP配置

    1 VRRP术语 2 VRRP工作过程 3 DHCP的优势 4 DHCP的工作原理 1 VRRP术语 VRRP 也即虚拟路由器冗余协议 利用VRRP 一组路由器 同一个LAN中的接口 协同工作 但只有一个处于Master状态 处于该状态的路
  • 7-3 删除字符 (30 分)

    这位更是重量级 输入一个字符串 str 再输入要删除字符 c 大小写不区分 将字符串 str 中出现的所有字符 c 删除 提示 去掉两端的空格 输入格式 在第一行中输入一行字符 在第二行输入待删除的字符 输出格式 在一行中输出删除后的字符串
  • java中String作为参数传递终极解决

    今天我遇到一个问题就是string的传值问题 它虽然是一个引用数据类型 但是却和基本数据类型一样无法被改变 我看到网上的很多解释都很离谱 比如说很多解释说String要看成和Integer一样的包装类 看成 是char 的包装类 所以和其一
  • 快速开始一个 CakePHP project 的 基础/步骤

    请参考 CakePhP cookbook4 0 好的这就是本文和全部与核心 你可以跳出去了 好 正经一点 回来 1 下载xampp php集成环境 2 下载cakephp 框架 查看cookbook中的installation a 若用的x
  • 引进包类

    使用Support Library 支持库 Using the Support Library 负责人 River 完成时间 7月18日 原文链接 http developer android com training basics fra
  • (六)Spring Cloud Alibaba Sentinel(含案例源码、案例解析及软件)

    案例源码gitee地址 https gitee com BanSheng spring cloud alibaba examples tree master sentinel example client Spring Cloud Alib
  • 人工智能技术应用中机器学习里的6种偏差

    在人工智能的学习过程中 偏差会以多种不同的形式出现在机器学习中 Bias的定义 Bias 对某人或某一群体的倾向或偏见 尤指被认为不公平的方式 Bias被解释为偏差也可解释为偏见 其定义包括 不公平 一词 偏差几乎可以在每个阶段影响机器学习
  • msm8953-配置I2C 速率

    前言 本文记录调试高通平台某I2C 器件通讯出现异常 尝试修改I2C 时钟速率时所做的记录 平台 MSM8953 系统 Android 9 0 分类 I2C CLK 结论 先说结论 经过分析以及验证 平台支持的I2C特性如下 默认速度 10