因为海思文档中并没有读取MIPI屏 的说明及操作方式,经多方查找资料后,可以正常读取MIPI屏ID,现记录一下:
在海思的文档中,写入MIPI指令的是 0x05 , 0x23 ,0x29 写入 ,查看MIPI指令说明:如图
在上图中查看到 0x06 是读MIPI 值的指令。
int Mipi_Read_ID(unsigned char addr,unsigned int *id)
{
U_GEN_HDR gen_hdr;
unsigned short data_type = 0x06;
unsigned short cmd_size = addr;
gen_hdr.u32 = mipi_tx_regs_va->GEN_HDR.u32;
gen_hdr.bits.gen_dt = data_type;
gen_hdr.bits.gen_wc_lsbyte = cmd_size & 0xff;
gen_hdr.bits.gen_wc_msbyte = (cmd_size & 0xff00) >> 8;
mipi_tx_regs_va->GEN_HDR.u32 = gen_hdr.u32;
udelay (2 * 1000);
int count = 0;
while(mipi_tx_regs_va->CMD_PKT_STATUS.bits.gen_rd_cmd_busy)
{
udelay(1000);
if(count == 100)
break;
count ++;
}
*id = mipi_tx_regs_va->GEN_PLD_DATA.u32;
return 0;
}
单独使用 0x06读指令,依然无法正确读取 到MIPI ID ,经测试,还需要设置,读取的长度
int Mipi_Set_ReadSize(int datasize)
{
int s32Ret;
cmd_info_t cmd_info = {0};
if(datasize < 0 )
return -1;
cmd_info.devno = 0;
cmd_info.cmd_size = datasize ;
cmd_info.data_type = 0x37;
cmd_info.cmd = NULL;
s32Ret = mipi_tx_ioctl(HI_MIPI_TX_SET_CMD, &cmd_info,NULL);
if (0 != s32Ret)
{
printf("MIPI_TX SET CMD failed\n");
return -1;
}
udelay(1000);
}
在读到ID操作中,先调用 Mipi_Set_ReadSize,后读取,就可以正常读到MIPI屏ID值。