Other Parts Discussed in Thread: DLPA2000, DLP3010,
Tool/software:
Hello,
I am bringing up a board with a DLPC3478, DLPA2000, and DLP3010. We have previously used all three chips together in other products. I am using a custom build of the 8.1.1 DLPC firmware which disables LED control via the DLPA2000, as we are using a dedicated IC for LED control.
I have successfully programmed and DLPC's external flash, and I can communicate with it over I2C. However, when I command the DLPC to display a test pattern or stream internal patterns, the DLP3010 does not work as expected. The exact pattern displayed for the solid on test pattern varies from run to run, see below for two examples:
I wanted to check if the controller to DMD interface was working,and I saw the DMD I/F Training Data register (0xDC). I added the following code to dlpc34xx.c/.h to the TI DLP API module to read it.
typedef enum { PIN_PAIR_A = 0x00, PIN_PAIR_B = 0x01, PIN_PAIR_C = 0x02, PIN_PAIR_D = 0x03, PIN_PAIR_E = 0x04, PIN_PAIR_F = 0x05, PIN_PAIR_G = 0x06, PIN_PAIR_H = 0x07, } DLPC34XX_DMDInterfacePinPair_e; typedef struct { DLPC34XX_DMDInterfacePinPair_e PinPair; bool PairSelectedForTraining; bool TrainingError; uint8_t SelectedDLL; uint8_t LowPassDLL; uint8_t HighPassDLL; } DLPC34XX_DMDInterfaceTrainingResult_s; uint32_t DLPC34XX_ReadTrainingResult(DLPC34XX_DMDInterfacePinPair_e pinPair, DLPC34XX_DMDInterfaceTrainingResult_s *result) { uint32_t Status = 0; uint8_t data[4] = {0}; uint8_t param = 0; DLPC_COMMON_ClearWriteBuffer(); DLPC_COMMON_ClearReadBuffer(); DLPC_COMMON_PackOpcode(1, 0xDC); param = 0x00 | (pinPair & 0x0F); DLPC_COMMON_PackBytes(¶m, 1); DLPC_COMMON_SetCommandDestination(0); Status = DLPC_COMMON_SendRead(4); for (int i = 0; i < sizeof(data); i++) { data[i] = *(DLPC_COMMON_UnpackBytes(1)); } if (Status == 0) { uint8_t overviewByte = data[0]; result->TrainingError = (overviewByte >> 5) & 0x01; result->PairSelectedForTraining = (overviewByte >> 4) & 0x01; result->PinPair = overviewByte & 0x0F; result->SelectedDLL = data[1] & 0x3F; result->LowPassDLL = data[2] & 0x3F; result->HighPassDLL = data[3] & 0x3F; } return Status; }
However, when I try to read each pin pair, they all report back data as
0xDC, 0x3F, 0x3F, 0x3F.
This does not seem correct to me, as the decoded pin pair is 12, which is not a valid pin pair.
Is this register supported in the 8.1.1 DLPC firmware?