Other Parts Discussed in Thread: TDA2SX
您好!
我开发的芯片是 TDA2SX、我使用的 VSDK 版本是 processor_sdk_vision_03_06_00_00;
在开发过程中、我遇到了以下问题:我们将电源芯片和 ISP (GW4200)连接到 I2C1总线、并将其他三个 ISP 芯片分别连接到 i2c2~4。 在 Linux 启动过程中、我们需要配置电源芯片、启动后、我需要使用 RTOS 下的 i2c 端口来诊断摄像头。 硬件如下所示:
&i2c1{
status ="好的";
时钟频率=<400000>;
tps659038:tps659038@58{
compatible ="ti、tps659038";
reg =<0x58>;
ti、Palmas 覆盖电源保持;
ti、system-power-controller;
tps659038_psmic
={sms-ma-regulators/sm123-timers/tps100>
;tpsmv-time-regulators=<p500123-ma-timers/ps= tps1600*;tps1660123-ma-ma-ma-ma-ulators/smv-ulators/smv-ulators/smv/ps= tps=pms-ulators/smv-ulators/smv/ps=<p500123-timers/ps=pms
smps45_reg:smps45{
/* VDD_DSPEVE */
电脑控制器名称="smps45";
电脑控制器最小值微伏=< 850000>;
电脑控制器最大值微伏=<1250000>;
电脑控制器始终开启;
电脑控制器启动;
};
smps6_reg:smps6{
/* VDD_GPU - over VDD_SMPS6 */
reguler-name ="smps6";
reguler-min-microvolt =<850000>;
reguler-max-microvolt =<1250000>;
reguler-always-on;
reguler-boot-on;
};
smps7_reg:smps7{
/* core_VDD */
reguler-name ="smps7";
reguler-min-microvolt =<850000>;
reguler-max-microvolt =<1150000>;
reguler-always-on;
reguler-boot-on;
};
smps8_reg:smps8{
/* VDD_IVAHD */
reguler-name ="smps8";
reguler-min-microvolt =< 850000>;
reguler-max-microvolt =<1250000>;
reguler-always-on;
reguler-boot-on;
};
smps9_reg:smps9{
/* VDDS1V8 */
regulator-name ="smps9";
regulator-min-microvolt =<1800000>;
regulator-max-microvolt =<1800000>;
regulator-always-on;
regulator-boot-on;
};
ldo1_reg:ldo1{
/* LDO1_out ->SDIO */
reguler-name ="ldo1";
reguler-min-microvolt =<1800000>;
reguler-max-microvolt =<3300000>;
reguler-always 开启;
reguler-boot-on;
};
ldo2_reg:ldo2{
/* VDD_RTCIO */
/* LDO2 -> VDDSHV5、LDO2也会转至 CAN_PHY_3V3 */
电脑控制器名称="ldo2";
电脑控制器最小微伏=<3300000>;
电脑控制器最大微伏=<3300000>;
电脑控制器始终
开启;电脑控制器启动
};
ldo3_reg:ldo3{
//* VDDA_1v8_PHY */
reguler-name ="ldo3";
reguler-min-microvolt =<1800000>;
reguler-max-microvolt =<1800000>;
reguler-always 开启;
reguler-boot-on;
};
ldo9_reg:ldo9{
/* VDD_RTC */
reguler-name ="ldo9";
reguler-min-microvolt =<1050000>;
reguler-max-microvolt =<1050000>;
reguler-always-on;
reguler-boot-on;
reguler-allow-bypass;
};
ldoln_reg:ldoln{
/* VDDA_1V8_PLL */
reguler-name ="ldoln";
reguler-min-microvolt =<1800000>;
reguler-max-microvolt =<1800000>;
regul稳 压器始终开启;
reguler-boot-on;
};
ldousb_reg:ldousb{
// VDDA_3V_USB:VDDA_USBHS33 */
电脑控制器名称="ldousb";
电脑控制器最小值微伏=<3300000>;
电脑控制器最大值微伏=<3300000>;
电脑控制器启动;
};
/* REGEN1未使用*/
regen2:regen2{
/* PMIC 内部资源所需*/
reguler-name ="regen2";
reguler-boot-on;
reguler-always-on;
};
/* REGEN3未使用*/
sysen1:sysen1{
/* PMIC_Regen_3V3 */ regulator =
sysen-on
;
}sysen2
常开
;sysenregulator = sysen2;sysen-regulator = sysen-on;
};
};
};
pcf_LCD:GPIO@20{
Status ="disabled";
compatible ="NXP、pcf8575";
reg =<0x20>;
GPIO 控制器;
#GPIO-cells =<2>;
interrupt-parent =<&GPIO6>;
interrupts =<11 IRQ_TYPE_ EDGE_FALLING >;
interrupt-controller;
#interrupt-cells =<2>;
};
pcf_GPIO_21:GPIO@21{
status ="禁用";
compatible ="ti、pcf8575";
reg =<0x21>;
线路初始状态=<0x1408>;
GPIO 控制器;
<#GPIO-cells =<2>;
interrupt-parent =<&GPIO6>;
interrupts =<11 IRQ_TYPE_ EDGE_FALLINGLE>;
中断控制器;
#interrupt-cells =<2>;
};
tlv320aic3106:tlv320aic3106@19{
#sound-di-cells =<0>;
compatible ="ti、"v3di-bias
=<v3mcrims"
;<v3deg";<v3dich>=<v3deg";<v3deg-reg>;<v3d
/* 2.0V */
状态="禁用";
/*稳压器*/
AVDD-SUPPLY =<&EVM_3V3_SW>;
IOVDD-SUPPLY =<&EVM_3V3_SW>;
DRVDD-SUPPLY =<&EVM_3V3_SW>;
DVDD>;
}
};
&i2c2{
status ="禁用";
ti、no-reset-on-init;
ti、no-idle-on-init;
}
;&i2c3{
status ="禁用";
ti、no-reset-on-init;
ti、no-idle-on-init;
};
&i2c4{
status ="禁用";
ti、no-init-on
、ti-reset-on;}
诊断摄像头时、i2c 的配置如下:
静态空 SetupI2C (uint32 port_id)
{
vps_printf ("setupi2c 第1步");
/*执行软件复位*/
I2CSoftReset (SOC_I2C1_base);
VPS_printf ("setupi2c 第2步");
/*启用 i2c 模块*/
I2CMasterEnable (SOC_I2C1_base);
VPS_printf (" while (!I2CSystemStatusGet (SOC_I2C1_base))");
while (!I2CSystemStatusGet (SOC_I2C1_base));
VPS_printf ("I2CMasterDisable");
/*将 i2c 置于复位/禁用状态*/
I2CMasterDisable (SOC_I2C1_base);
/*将 i2c 总线速度配置为100kHz */
#if defined (SOC_AM574x)|| defined (SOC_AM572x)|| defined (SOC_AM571x)
I2CMasterInitExpClk (SOC_I2C1_base、96000000、
4000000U、100000);
#else
I2CMasterInitExpClk (SOC_I2C1_base、24000000、
8000000、100000);
#endif
I2COwnAddressSet (SOC_I2C1_base、0、
I2C_ALLOW_ADDR_0);
I2CSyscInit (SOC_I2C1_base、0x08);
/*设置 Rx 和 Tx FIFO 阈值并重置 FIFO */
I2CFIFOThresholdConfig (SOC_I2C1_base、0、I2C_TX_MODE);
I2CFIFOThresholdConfig (SOC_I2C1_base、0、I2C_RX_MODE);
/*设置 i2c 从器件地址*/
I2CMasterSlaveAddrSet (SOC_I2C1_base、HSI2C_SLAVE_ADDR);
/*使 i2c 退出复位*/
I2CMasterEnable (SOC_I2C1_base);
/*启用自由运行模式*/
I2CMasterEnableFreeRun (SOC_I2C1_base);
}
当我配置 I2C2/3/4时、可以正常配置它们、但当我配置 i2c1时、会发生以下错误:
[主机][IPU2] 33.164277 s:平台解锁 MMR [host][IPU2] 33.164338 s:setupi2c 步骤1 [host][IPU2] 33.164399 s: [host][IPU2 ] 33.164460 s:### XDC 断言-错误回调开始### [host][IPU2 ] 33.164521 s: [host][IPU2 ] 33.164673 s:E_hardFault:Forced [host][IPU2] 33.164734 s: [host][IPU2 ] 33.164765 s:### XDC 断言-错误回调结束### [host][IPU2 ] 33.164826 s: [host][IPU2 ] 33.165039 s: [host][IPU2 ] 33.165100 s:### XDC 断言-错误回调开始### [host][IPU2 ] 33.165161 s: [host][IPU2 ] 33.165283 s:e_busFault:PRECISERR:立即总线故障、确切地址:48070010 [host][IPU2 ] 33.165375 s: [host][IPU2] 33.165405 s:### XDC 断言-错误回调结束###
因此、我认为在 Linux 器件树中使用 i2c1、这使得在 RTOS 中无法访问 i2c1的器件地址。 但是,当我在 DTS 文件中将 i2c1节点禁用时,内核无法启动;
由于 Linux 在启动时只需配置一次即可配置电源芯片、因此是否可以在 Linux 和 RTOS 下访问 i2c1?



