蚊子许 2017-10-13 07:06 采纳率: 0%
浏览 4415

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;

}

  • 写回答

1条回答 默认 最新

  • devmiao 2017-10-13 15:52
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题