hi3516dv300 mipi屏读取ID

因为海思文档中并没有读取MIPI屏 的说明及操作方式,经多方查找资料后,可以正常读取MIPI屏ID,现记录一下:

在海思的文档中,写入MIPI指令的是 0x05 , 0x23 ,0x29 写入 ,查看MIPI指令说明:如图hi3516dv300 mipi屏读取ID_第1张图片
在上图中查看到 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值。

你可能感兴趣的:(hi3516DV300)