msm8953-配置I2C 速率

前言

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

平台:MSM8953。

系统:Android 9.0

分类:I2C CLK

结论

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

默认速度:100K。

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

支持范围:50K ~ 1M

寄存器描述

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

扫描二维码关注公众号,回复: 14878583 查看本文章

寄存器描述如下

从这里可以看到,由于高低电平的配置寄存器都是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

柳絮纷飞里看见了故乡

猜你喜欢

转载自blog.csdn.net/FANG_YISHAO/article/details/125080378