Closed LuisCRSousa closed 4 years ago
what is your I2C driver queue size? try increasing that in MHC, regenerate code and see if things improve.
Already tried it. Default was 2, increased to 10. Same thing
Made it work with the blocking functions unfortunatly. But..
Had to use the blocking functions on a while loop till they returned true because if I called a DRV_I2C_WriteTransfer after a DRV_I2C_WriteReadTransfer, the former would return false at first call.. Is this normal?
while (DRV_I2C_WriteReadTransfer(goodix911Data.drvI2CHandle, GOODIX911_SLAVE_ADDR, (void) &goodix911Data.registerAddr, 2, (void) &goodix911Data.rxBuffer, 1) == false){}
//process data
while (DRV_I2C_WriteTransfer(goodix911Data.drvI2CHandle, GOODIX911_SLAVE_ADDR, (void*) &goodix911Data.txBuffer, 3) == false){} goodix911Data.state = GOODIX911_STATE_IDLE;
I experienced some problems with the example above still...
I'm working with pic32mz2048dab288 and I2C3. I heard these chips had problems on this i2c interface before. Is this port still problematic?
Made the same examples with I2C4, same problems.
The only way that I made it work properly was to call just once per cycle the blocking function DRV_I2C_WriteReadTransfer, reading all consecutives registers.
Still wanted to know why can't make it work with the async functions and why _DRV_I2C_FreeTransferObjGet returns false..
@LuisCRSousa , can you please share your I2C based projects that uses the Asynchronous and Synchronous I2C driver? For the Synchronous driver, did you enable RTOS? Synchronous drivers currently only work in RTOS environment.
I didn't enabled RTOS, but it worked..
Please give me a contact to share it with you,
I created a project from scratch, and now it worked with async methods.. I'm trying to compare harmony generated files trying to find any differences.
Found the issue after diffmerge every file :)
Using gcc otimization 0 crashes the I2C port async methods after a few seconds (10-20). It works using otimization 1.
Any explanation for this?
@LuisCRSousa, @vishalgandhi, I don't see more follow up on this issue here. Can I close it?
I'm controlling a touch panel with i2C. It works but after a few seconds, DRV_I2C_WriteReadTransferAdd returns me an invalid DRV_I2C_TRANSFER_HANDLE.
I've done everything to workaround it by reseting the I2C driver, read the errata and implemented the 3 solutions for some problem that may occur and till now I'm stuck.
I've debugging the application and found that the problem may reside in the following function at drv_i2c.c static DRV_I2C_TRANSFER_OBJ _DRV_I2C_FreeTransferObjGet(DRV_I2C_CLIENT_OBJ clientObj).
This function returns NULL when the bug occurs.
When the function returns null, SDA pulls down forever. If I reset ON flag at I2C3CON the SDA retuirns high, but after setting this flag again, DRV_I2C_WriteReadTransferAdd returns invalid handle again.