我是靠谱客的博主 俊逸摩托,最近开发中收集的这篇文章主要介绍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 节点配置

kernelmsm-4.9archarm64bootdtsnwyXXX_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_Pkernelmsm-4.9driversi2cbussesi2c-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 速率前言结论寄存器描述计算公式代码修改参考文献柳絮纷飞里看见了故乡所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部