Hi,
Im using s32k144 EVB for i2c implementation. when i try to verify the data which im sending through the controller using logic analyzer im not getting the proper data through SDA line .
im using PA2 and PA3 for SCL & SDA im attaching my code and snap shot of the SCL & SDA signals please look into it and let mw know where i have did wrong.
#include "Cpu.h"
volatile int exit_code = 0;
const uint8_t txbuff[8]={0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18};
lpi2c_master_state_t lpi2c1MasterState;
const lpi2c_master_user_config_t lpi2c1_MasterConfig0 = {
.slaveAddress = 60U,
.is10bitAddr = false,
.operatingMode = LPI2C_STANDARD_MODE,
.baudRate = 0,
.transferType = LPI2C_USING_INTERRUPTS,
.dmaChannel = 0U,
.masterCallback = NULL,
.callbackParam = NULL,
};
int main(void)
{
/* Write your local variable definition here */
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
#ifdef PEX_RTOS_INIT
PEX_RTOS_INIT(); /* Initialization of the selected RTOS. Macro is defined by the RTOS component. */
#endif
/*** End of Processor Expert internal initialization. ***/
/* Write your code here */
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
LPI2C_DRV_MasterInit(INST_LPI2C1, &lpi2c1_MasterConfig0,&lpi2c1MasterState);
for(uint8_t data=0x00;data<0xFF;data++)
{
LPI2C_DRV_MasterSendDataBlocking(INST_LPI2C1,txbuff,sizeof(txbuff),1,1000);
}
}
Solved! Go to Solution.
Also please try set the slave address to 0x3C and try again.
Hi@bhanu_p
There is no problem with your code. The reason for these phenomena is that your slave device does not respond.
This may be because your slave device does not work properly, or the timing of the transmission is incorrect, or the address sent is incorrect.
I don't have "GME12864-49 0.96" display, and this is beyond our support range.
Hi @Senlent
same display i have used with stm32f407 evb board with 100khz clock and 0x78 is slave id and its working fine and i can see the display data which i'm writing data,
the problem i'm facing with only nxps32144 evb board only
Hi @Senlent ,
i have observed 2 things when i use 0x78 as slave id in stm32 its working and when i observed the logic analyzer signals slave id is converted to 0x3C(0x78>>1) based on this i have changed my slave id 0x78 to 0x3C in NXPs32 then its working fine now.
Thanks.
Then please provide me with the results of the logic analysis sampling, and I can help you compare whether the data sent by S32K144EVB is consistent with the data implemented by STM32
Hi@bhanu_p
There should be no problem with the code. Try it again by connecting a slave device.
Below is the result of my test using S32K144EVB
Hi @Senlent ,
i have connected my slave and verified but still I'm not getting proper output.
while im checking my slave id is correct or not. im getting "STATUS_TIMEOUT" status.
int main(void)
{
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
for(uint8_t data=0;data<255;data++)
{
int ret;
const lpi2c_master_user_config_t lpi2c1_MasterConfig0 = {
.slaveAddress = data,
.is10bitAddr = false,
.operatingMode = LPI2C_STANDARD_MODE,
.baudRate = 1000000U,
.transferType = LPI2C_USING_INTERRUPTS,
.dmaChannel = 0U,
.masterCallback = NULL,
.callbackParam = NULL,
};
LPI2C_DRV_MasterInit(INST_LPI2C1,&lpi2c1_MasterConfig0,&lpi2c1MasterState);
ret=LPI2C_DRV_MasterSendDataBlocking(INST_LPI2C1,txbuff,sizeof(txbuff),1,1000);
if(ret == STATUS_SUCCESS)
{
break;
}
}
for(;;) {
if(exit_code != 0) {
break;
}
}
return exit_code;
}
please let me know what i have missed to in this code
im trying to implement GME12864-49 0.96" display, if possible please share any i2c_exmaple it would help me out to solve this issue
Hi@bhanu_p
" if possible please share any i2c_exmaple it would help me out to solve this issue"
Actually, you can find below example in S32 DS, and the test result i have already send to you before.
hi @Senlent ,
i have tried the example which you have mention in previous post but still my signals are not coming properly please look into it.
I have given a screenshot of the test results, so there is no problem with this routine. Have you used two S32K144EVBs to test this routine?
Try to find your hardware problems, whether the connection is correct, whether the power supply is normal, whether the external pull-up is performed, etc.
Hi @Senlent ,
while working i have observed two things when i use ".baudRate = 10000U," im getting response as below means my slave id is coming properly but after that the TXbuffer data no reflecting and clock is also generating properly but when i use ".baudRate = 100000U," or above im not getting properly signals also below are the 2 different signals.
my slave id is 0x78 data which im sending is
uint8_t data[2];
data[0] = 0x00; // Co=1, D/C#=0 (Command)
data[1] = cmd; // Command to send (0xAE/0xDF/...............)
LPI2C_DRV_MasterSendDataBlocking(INST_LPI2C1, data, 2, true, OSIF_WAIT_FOREVER);
baudrate with 10000U(10khz)
baudrate with 100000(100khz)
Please set a larger timeout value and then try again.
For example, modificate timeout value to "0x00ff_ffff" or more larger
LPI2C_DRV_MasterSendDataBlocking(INST_LPI2C1,txbuff,sizeof(txbuff),1,1000);
Hi @Senlent ,
i have alredy given the large timeout still im getting the same response im not getting the data buffer which i have given im only getting the slave id 0x3c as output.
for example i have given timeout "1000" & "5000" still same nothing has been changed. please look in to the code i have share and let me know if any ting wrong