ssd2828芯片初始化怎么操作?

我用SSD2828芯片实现RGB到MIPI,第一步初始化2828芯片,我做了复位和设置时钟,想验证一下芯片spi接口工作正常不,读取DeviceID,但是一直为零,不知道是哪里出了问题,哪个大神帮看一下,谢谢。
读ID的代码如下:
void ReadSSD2828_DeviceID(void) {
u8 i;
u8 SendBuffer[8];
u8 RecvBuffer[8];

if (Gpio_Init() == XST_SUCCESS)
    printf("Initialize GPIO successed.\n\r");
else {
    printf("Initialize GPIO failed.\n\r");
    return;
}
//reset ssd2828
XGpioPs_WritePin(&Gpio, SHUT_Pin, 0x0);
XGpioPs_WritePin(&Gpio, CSX_Pin, 0x1);
XGpioPs_WritePin(&Gpio, SDC_Pin, 0x0);
XGpioPs_WritePin(&Gpio, SDO_Pin, 0x0);
XGpioPs_WritePin(&Gpio, RST_Pin, 0x1);
usleep(100);
XGpioPs_WritePin(&Gpio, RST_Pin, 0x0);
usleep(100);
XGpioPs_WritePin(&Gpio, RST_Pin, 0x1);

XGpioPs_WritePin(&Gpio, CSX_Pin, 0x0);
RecvBuffer[1] = SPI_WriteCmd(0xB7);
RecvBuffer[2] = SPI_WriteData(0x50); //50=TX_CLK 70=PCLK
RecvBuffer[3] = SPI_WriteData(0x00); //config register
XGpioPs_WritePin(&Gpio, CSX_Pin, 0x1);
usleep(100);
printf("Read SDI: %02X %02X %02X %02X\n\r", RecvBuffer[0], RecvBuffer[1],
        RecvBuffer[2], RecvBuffer[3]);

/*SendBuffer[0] = 0xB0;
 SendBuffer[1] = 0xFA;
 SendBuffer[2] = 0;
 SendBuffer[3] = 0;*/

XGpioPs_WritePin(&Gpio, CSX_Pin, 0x0);
RecvBuffer[0] = SPI_WriteCmd(0xD4);
RecvBuffer[1] = SPI_WriteData(0xFA);
RecvBuffer[2] = SPI_WriteData(0x00);
XGpioPs_WritePin(&Gpio, CSX_Pin, 0x1);
printf("Read SDI: %02X %02X %02X %02X\n\r", RecvBuffer[0], RecvBuffer[1],
        RecvBuffer[2], RecvBuffer[3]);

XGpioPs_WritePin(&Gpio, CSX_Pin, 0x0);
RecvBuffer[0] = SPI_WriteCmd(0xB0);
//RecvBuffer[1] = SPI_WriteCmd(0xFA);
RecvBuffer[2] = SPI_WriteData(0x00);
RecvBuffer[3] = SPI_WriteData(0x00);
XGpioPs_WritePin(&Gpio, CSX_Pin, 0x1);
printf("Read SDI: %02X %02X %02X %02X\n\r", RecvBuffer[0], RecvBuffer[1],
        RecvBuffer[2], RecvBuffer[3]);

}
//SPI4W8BIT
uint8_t SPI_WriteCmd(uint8_t CmdByte) {
uint8_t i, ret = 0;

XGpioPs_WritePin(&Gpio, CSX_Pin, 0x0);
XGpioPs_WritePin(&Gpio, SCK_Pin, 0x0);
XGpioPs_WritePin(&Gpio, SDC_Pin, 0x0);  //command
for (i = 0; i < 8; i++) {
    if (CmdByte & 0x80)  //write 1 bit
        XGpioPs_WritePin(&Gpio, SDO_Pin, 0x1);
    else
        XGpioPs_WritePin(&Gpio, SDO_Pin, 0x0);

    XGpioPs_WritePin(&Gpio, SCK_Pin, 0x1);  //clk=1
    CmdByte = CmdByte << 1;

    ret |= XGpioPs_ReadPin(&Gpio, SDI_Pin); //read 1 bit
    ret = ret << 1;
    XGpioPs_WritePin(&Gpio, SCK_Pin, 0x0); //clk=0
}
//XGpioPs_WritePin(&Gpio, CSX_Pin, 0x1);
return ret;

}

uint8_t SPI_WriteData(uint8_t DatByte) {
uint8_t i, ret = 0;

XGpioPs_WritePin(&Gpio, CSX_Pin, 0x0);
XGpioPs_WritePin(&Gpio, SCK_Pin, 0x0);
XGpioPs_WritePin(&Gpio, SDC_Pin, 0x1);  //data
for (i = 0; i < 8; i++) {
    if (DatByte & 0x80)  //write 1 bit
        XGpioPs_WritePin(&Gpio, SDO_Pin, 0x1);
    else
        XGpioPs_WritePin(&Gpio, SDO_Pin, 0x0);

    XGpioPs_WritePin(&Gpio, SCK_Pin, 0x1);  //clk=1
    DatByte = DatByte << 1;

    ret |= XGpioPs_ReadPin(&Gpio, SDI_Pin); //read 1 bit
    ret = ret << 1;
    XGpioPs_WritePin(&Gpio, SCK_Pin, 0x0); //clk=0
}
//XGpioPs_WritePin(&Gpio, CSX_Pin, 0x1);
return ret;

}

http://blog.csdn.net/luoqindong/article/details/39349333