2402070_en-US

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2402070_en-US

2402070_en-US

Replacement of some IIC drivers for K312 RTD3.0.0 to RTD6.0.0

Hi

I'm currently encountering an IIC slave clock suspension issue in RTD 3.0.0, which I've found to be related to the IIC clock extension function. Following a recommendation from the FAE, it was stated that this issue doesn't exist in the 6.0.0 driver. Due to project timelines and based on the principle of minimal changes, I will...The IIC driver files were extracted from version 6.0.00 and placed in version 3.00.In the RTD, I found it wasn't working properly. After the changes, the IIC couldn't exit the interrupt once it received data.

I would like to ask:

1. Has anyone tried this operation (3.00RTD)?(I've replaced some drivers with version 6.00). Do you support this change? Do I have any other related drivers that haven't been ported yet?

2. I discovered an IIC change item in version 6.0.00, which was fixed in version 4.00. Version 5.00 inherited this fix, but version 6.00 reverted to the logic of version 3.00. However, in the 6.00 release...There is no related description in the notes. Did version 6.00 make other changes to fix this bug?


static void Lpi2c_Ip_SlaveIRQHandlerInternal(uint8 Instance)
{
LPI2C_Type *BaseAddr;
Lpi2c_Ip_SlaveStateType * Slave;
boolean StopDetect = FALSE;
boolean RepeatStartDetect = FALSE;

BaseAddr = Lpi2c_Ip_pxBase[Instance];
Slave = Lpi2c_Ip_pxSlaveState[Instance];

StopDetect = LPI2C_Get_SlaveSTOPDetectEvent(BaseAddr);
RepeatStartDetect = LPI2C_Get_SlaveRepeatedStartEvent(BaseAddr);

/* Check address valid and tx/rx event */
Lpi2c_Ip_SlaveCheckDataEvent(Instance, BaseAddr, Slave);

if (RepeatStartDetect)
{
Slave->RepeatedStarts++;

if ((1U == Slave->RepeatedStarts) && (Slave->Is10bitAddress)) // This has been modified in version 4.00
{
RepeatStartDetect = FALSE;
LPI2C_Clear_SlaveRepeatedStartEvent(BaseAddr);
}
}

if ((TRUE == StopDetect) || (TRUE == RepeatStartDetect))
{
/* Stop/repeated start detected */
Lpi2c_Ip_SlaveStopDetectHandler(BaseAddr, Slave);

if (TRUE == StopDetect)
{
/* reset repetead starts for a new transfer */
Slave->RepeatedStarts = 0U;
}
}

/* Check for slave errors */
Lpi2c_Ip_SlaveCheckErrorEvent(BaseAddr, Slave);
}


Related bug: ARTD-6112

Reyna_pan45_0-1785920300296.png



Re: K312 RTD3.0.0到RTD6.0.0 IIC部分驱动更换

Hi @Reyna_pan45 

We do not recommend mixing code from different RTD releases, as this combination has not been validated. For this reason, we can not guarantee the expected functionality or behavior when components from different releases are used together.

Regarding ARTD-81841, in the most recent releases this issue is tracked under ARTDCC2-91. It is currently a known issue and, unfortunately, there is no available workaround at this time, as shown in the image below.

VaneB_0-1785963496184.png

Sorry for any inconvenience this may cause.


BR, VaneB

Re: K312 RTD3.0.0到RTD6.0.0 IIC部分驱动更换

Hi @VaneB 

Is there any more relevant description about this bug? I found during testing that modifying item ARTD-81841  can alleviate some issues (when frequently switching interrupts), even if the root cause cannot be identified.

标记 (1)
无评分
版本历史
最后更新:
17 小时之前
更新人: