三轴加速度器件(仅A)单元测试SCL高电平持续时间tLOW值约为1.26us,小于门限(最小值)1.3us,i2c频率实测391kHz(应该为400kHz),需要进行时序优化。
该问题最后未进行任何时序优化,不过在该过程中的思考方式可供参考。
SCL高电平持续时间tLOW由i2c clk控制。
进行以下尝试
1.将单A器件中i2c clk发送的频率由400改为800
/adsp_proc/ssc/sensors/da718/src/sns_mir3da_sensor.c
state->common.com_port_info.com_config.min_bus_speed_KHz = 400;
state->common.com_port_info.com_config.max_bus_speed_KHz = 400;
测试无明显改善。
2.更改i2c的dts配置
ap侧:kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm89x9.dtsi
在该器件对应的i2c通路上更改(需要知道该器件接在哪个芯片上、接在哪路i2c上)
qcom,noise-rjct-scl = <0>;
qcom,noise-rjct-sda = <0>;
从0到3分别尝试
测试无明显改善。(这个是芯片平台修改错了,于是修改无效,该项目正确的芯片是msm89x7,但是由于时间原因,没有去修改编译测试,大家遇到问题的时候可以自己尝试修改试试)
3.依据I2C_CLK =19.2Mhz/(29+14+6)修改
ap侧:
kernel/msm-4.9/drivers/i2c/busses/i2c-msm-v2.c
/*
* divider values as per HW Designers
*/
static struct i2c_msm_clk_div_fld i2c_msm_clk_div_map[] = {
{KHz(100), 124, 62},
{KHz(400), 28, 14}, //28 is SCL tLOW counter and 14 is SCL tHIGH counter
{KHz(1000), 8, 5},
};
将SCL tLOW 改为比28大的数值,分别测试在29,32,34时的tLOW值,测试无明显改善。
fs_div,ht_div分别是低电平的计数器和高电平的计数器,要保证fs_div+ht_div+6总体减小,fs_div增大,这样时钟频率可以向400KHz接近,然后t_low的持续时间增大。可以根据需求调整这两个分频系数。
增大SCL tLOW 改为比28大的数值,减小SCL tHIGH,同时保证(fs_div+ht_div+6)减小,改为(30,11),(32,9),测试无明显改善。
4.评估风险
Qcom回复:已无可更改寄存器。
联系单A器件FAE,其研发评估通信正常无风险。