msm8953-配置I2C 速率
前言
本文记录调试高通平台某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 速率相关推荐
- MSM8953配置I2C及SPI
此次完成的任务是要使能高通8953平台的i2c和spi,主要做的工作就是在设备树文件中添加节点信息.主要的工作在于对设备树文件的修改,主要修改了msm8953-pinctrl.dtsi和msm8953 ...
- SDM660 开机xbl中配置I2C
之前文章介绍了怎么在uefi中配置I2C ,如果我们需要更早一点的时间点配置I2C ,比如说项目中使用I2C 充电IC替代高通默认的充电IC ,那么就等不到在uefi中配置I2C了 ,需要再更早的时间 ...
- 5.常见i2c地址_修改i2c速率
一. 如何修改i2c 速率 1. 在设备驱动代码中i2c_probe(),添加: spin_lock(&kdsensor_drv_lock); g_pstI2Cclient->timin ...
- Qcom 平台 LK 阶段配置 I2C
qcom平台LK 阶段配置IIC 版本号:V 1.0 作者:Leo 目录 目录... 1 前言... 4 1. 确定硬件... 4 2. LK I2C 函数接口... 5 2.1 ...
- 高通msm8953平台I2C分析
今天遇到了个I2C不通的问题,用的是I2C_8 msm8953.dtsi i2c8 = &i2c_8;i2c_8: i2c@7af8000 { /* BLSP2 QUP3 */compatib ...
- STM32CubeMX配置I2C读取DS3231
使用HAL库操作DS3231 因为DSP2这个项目需要计时间功能所以封装了一下这个芯片的程序 硬件设计 我将它接到了I2C1对应的IO口是(SCL > PB6 | SDA > PB7) 程 ...
- Linux I2C工具查看配置I2C设备【转】
转自:http://blog.chinaunix.net/uid-26895763-id-3478882.html 在處理音訊相關的問題時,我通常會找個方法來讀寫codec中register的值.幸好 ...
- ethtool -s 配置网卡速率双工的流程与 netdevice 的 user_ns 结构
strace 跟踪 ethtool -s 执行过程 socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 ioctl(3, SIOCETHTOOL, 0x7ffdb4 ...
- A 平台I2C 的使用
下面分享一下amlogic 平台I2C 使用的一点心得. I2C controllers 概述 I2C 是Inter-Integrated Circuit的缩写,发音为"eye-square ...
最新文章
- python对文件的读操作方法有哪些-Python文件常用操作方法
- ECCV 2018论文解读 | DeepVS:基于深度学习的视频显著性方法
- java人力资源管理系统设计_人力资源管理系统——《Java Web程序设计》课程设计...
- 如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (上)
- 激光炸弹(BZOJ1218)
- android 号码查联系人,Android联系人查询
- layui 渲染select下拉选项 ,日期控件的用法
- HttpHandler和HttpModule 心得介绍
- 【Mac】setremotelogin: Turning Remote Login on or off requires Full Disk Access privileges.
- pure CSS3 triangle icon
- Psychology
- php 过滤微信符号昵称,PHP处理微信昵称特殊符号过滤的方法
- 美学心得(第二百四十一集) 罗国正
- 无人船水下地形测量的应用及优势
- 亚马逊广告api v2版php扩展库
- 成都电子科技大学深圳校区计算机学院导师简介
- 两个乒乓球队进行比赛,各出3人。甲队为A,B,C三人,乙队为X,Y,Z3人。已抽签决定比赛名单。有人像队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛手的名单
- sort() 函数的用法
- 为何工作让你没有成就感
- SurfacePro4_BMR_115_11.347.0.zip百度网盘下载连接
热门文章
- Synopsys Formality 2018操作流程
- 服务器运行时将杀毒软件关掉,云服务器的速度性能优化之一(关闭Windows杀毒软件及无关服务及程序)...
- 明解C语言(入门篇)第二章
- Steam32寄存器实现流水灯
- android指南针程序,如何在Android上制作精确的指南针
- 如何用深度学习生成图片(GAN, pix2pix, CycleGAN和pix2pixHD)
- win10计算机属性管理打不开,win10系统此电脑属性打不开怎么办
- Android 模拟器横屏竖屏切换设置
- 关于GMac和FLOPs讨论
- 计算机实用教学,【实用】计算机教学工作计划3篇