hi Team,
SAIC EP39 project DMH model use 947+948, now receive SAIC back-end information, the vehicle during the customer use of the vertical line of projection screen problem;
Details are as follows:
(1) The occurrence of malfunction phenomenon is sporadic and irregular;
(2) The duration of the failure varies, may be flashing for 1 second self-recovery, or lasting for 5-6 seconds self-recovery;
(3) No other special operations were carried out before and after the breakdown;
The problem only occurs in the meter display map interface (projection screen area);
Number: Up to now, 3 cases of malfunctions, sales of about 10,000 units;
See attached video for symptoms;
below is the 947 script.
void TI947_INIT(void) { if(DS90UB947_read_status ==0) { DS90UB947_Init_Delay_Cnt--; } if(DS90UB947_Init_Delay_Cnt == 62) { if(DS90UB947_read_status==0) { ds_reg = 0x23; wbuf[0] = 0x80; ret_io = hal_i2c_write_reg_data(i2c_handle, 0x0c, &ds_reg, 1, wbuf,1); ds_reg = 0x24; wbuf[0] = 0x80; ret_io = hal_i2c_write_reg_data(i2c_handle, 0x0c, &ds_reg, 1, wbuf,1); DS90UB947_read_count = 0; DS90UB947_read_status = 1; }else { if(ti947_count< 3) { ti947_count++; }else { ti947_count = 0; ds_reg=0x24; ret_io = hal_i2c_read_reg_data(i2c_handle, 0x0c, &ds_reg, 1, wbuf, 1); printf("read24_status=%d,ret_io=%d\n", wbuf[0],ret_io); if((wbuf[0]&0x1F) == 0x1B) { DS90UB947_read_status = 0; DS90UB947_read_count = 0; ds_reg = 0x24; wbuf[0] = 0x00; hal_i2c_write_reg_data(i2c_handle, 0x0c, &ds_reg, 1, wbuf,1); ds_reg = 0x23; wbuf[0] = 0x00; hal_i2c_write_reg_data(i2c_handle, 0x0c, &ds_reg, 1, wbuf,1); }else { if(DS90UB947_read_count< 499) // 10s { DS90UB947_read_count++; }else { DS90UB947_read_count = 0; ds_reg = 0x01; wbuf[0] = 0x01; hal_i2c_write_reg_data(i2c_handle, 0x34, &ds_reg, 1, wbuf,1); } } } } }else if(DS90UB947_Init_Delay_Cnt == 52) { ds_reg = 0x17; wbuf[0] = 0xde; hal_i2c_write_reg_data(i2c_handle, 0x0c, &ds_reg, 1, wbuf,1); ds_reg = 0x03; wbuf[0] = 0xda; hal_i2c_write_reg_data(i2c_handle, 0x0c, &ds_reg, 1, wbuf,1); }else if(DS90UB947_Init_Delay_Cnt == 42) { Task_io_ds90ub947_init2(); }else if(DS90UB947_Init_Delay_Cnt == 22) { Task_io_ds90ub948_Read1(); }else if(DS90UB947_Init_Delay_Cnt == 2) { DS90UB947_read_status = 1; if(ti948_count < 3) { ti948_count++; }else { ti948_count = 0; Task_io_ds90ub948_Read2(); } }else { } } void Task_io_ds90ub947_init2(void) { uint8_t ds_reg[10] = {0x40, 0x41, 0x42, 0x41, 0x42, 0x42, 0x42, 0x42, 0x41, 0x42}; uint8_t wbuf[10] = {0x10, 0x49, 0x16, 0x47, 0x20, 0xA0, 0x20, 0x00, 0x49, 0x00}; uint8_t temp8 = 0; for(temp8 = 0;temp8<10;temp8++) { hal_i2c_write_reg_data(i2c_handle, 0x0c, &ds_reg[temp8], 1, &wbuf[temp8],1); } } void Task_io_ds90ub948_Read1(void) { uint8_t ds_reg[2] = {0x00, 0x00}; uint8_t wbuf[2] = {0x00, 0x00}; ds_reg[0]=0x03; wbuf[0]=0xFA; hal_i2c_write_reg_data(i2c_handle, 0x0C, &ds_reg[0], 1, &wbuf[0],1); ds_reg[0]=0x03; wbuf[0]=0xDA; hal_i2c_write_reg_data(i2c_handle, 0x0C, &ds_reg[0], 1, &wbuf[0],1); ds_reg[0]=0x68; wbuf[0]=0x19; hal_i2c_write_reg_data(i2c_handle, 0x34, &ds_reg[0], 1, &wbuf[0],1); } void Task_io_ds90ub948_Read2(void) { uint8_t ds_reg = 0x00; uint8_t wbuf[2] = {0x00, 0x00}; uint16_t Hhigh=0; uint16_t Hlow=0; uint16_t Vhigh=0; uint16_t Vlow=0; int ret_ti948 = 0; ds_reg=0x68; wbuf[0]=0x19; hal_i2c_write_reg_data(i2c_handle, 0x34, &ds_reg, 1, &wbuf[0],1); // H active High monitor ds_reg=0x69; ret_ti948 = hal_i2c_read_reg_data(i2c_handle, 0x34, &ds_reg, 1, wbuf, 1); Hhigh=wbuf[0]; ds_reg=0x68; wbuf[0]=0x09; hal_i2c_write_reg_data(i2c_handle, 0x34, &ds_reg, 1, &wbuf[0],1); // H active Low monitor ds_reg=0x69; ret_ti948 = hal_i2c_read_reg_data(i2c_handle, 0x34, &ds_reg, 1, wbuf, 1); Hlow=wbuf[0]; ds_reg=0x68; wbuf[0]=0x39; hal_i2c_write_reg_data(i2c_handle, 0x34, &ds_reg, 1, &wbuf[0],1); // V active High monitor ds_reg=0x69; ret_ti948 = hal_i2c_read_reg_data(i2c_handle, 0x34, &ds_reg, 1, wbuf, 1); Vhigh=wbuf[0]; ds_reg=0x68; wbuf[0]=0x29; hal_i2c_write_reg_data(i2c_handle, 0x34, &ds_reg, 1, &wbuf[0],1); // V active Low monitor ds_reg=0x69; ret_ti948 = hal_i2c_read_reg_data(i2c_handle, 0x34, &ds_reg, 1, wbuf, 1); Vlow=wbuf[0]; Hhigh=Hhigh&0x3F; Hlow=Hlow&0x3F; Vhigh=Vhigh&0x3F; Vlow=Vlow&0x3F; Hhigh<<=6; Hhigh=Hhigh|Hlow; Vhigh<<=6; Vhigh=Vhigh|Vlow; printf("Hactive=%d,Vactive=%d\n", Hhigh,Vhigh); if((Hhigh == 1920U)&&(Vhigh == 720U)) { DS90UB947_read_status = 0; DS90UB948_read_count = 0; }else { if(DS90UB948_read_count < 4) { DS90UB948_read_count++; }else { DS90UB948_read_count = 0; DS90UB947_Init_Delay_Cnt = 43; DS90UB947_read_status = 0; DS90UB947_read_count = 0; } } }