滴滴FAE

各种调屏经验分享:TFT,AMOLED,PMOLED,详情见麦瑞科技术mrklcd.com

JD9852+深超2.4-MIPI-1Lane在展讯SC7731E调试

0
阅读(4872)

    JD9832是一颗支持市场常规QVGA玻璃的液晶驱动IC,自带GRAM,所以像SPI,MCU,MIPI-CMD MODE都支持,RGB就不更不要说了,相比ST7782M只能配BOE,直接把它秒成渣,相信能带领QVGA走上爆款巅峰,不过目前价格不亲民但性能优秀,相我信上量后成本肯定会降下来。

image.png

picture 1 接口汇总

常用寄存器介绍

password:0xDF,0x98,0x51,0xE9,

page select:DE,写0x00就是page0,写0x01就是page1,我们所知道的就是两个page

Bist mode(自检测模式):page 0 c2h,D3位设置为1,低3位写0-7依次出现如下画面,可用来验证初始化是否写成功

image.png

picture 2 bist寄存器


以下是展讯SC7731E平台的实战代码,仅供参考

滴滴FAE提醒:如果代码没发现问题,但LCD仍显示异常,建议把代码重新New一遍,防止掉到坑里

//JD9852+CTC2.4-MIPI-1LANE Video mode


#include "sprd_panel.h"

#include "sprd_dsi.h"

#include "dsi/mipi_dsi_api.h"

#include "sprd_dphy.h"


static uint8_t init_data[] = {

//PASSWORD

0x39,0x00,0x00,0x04,0xDF,0x98,0x51,0xE9,


//---------------- PAGE0 --------------

0x39,0x00,0x00,0x02,0xDE,0x00, 


//VGMP,VGSP,VGMN,VGSN

0x39,0x00,0x00,0x05,0xB7,0x36,0x8D,0x36,0x0B,


//Set_R_GAMMA

0x39,0x00,0x00,0x21,0xC8,0x3F,0x38,0x32,0x2D,0x2E,0x31,0x2B,0x2C,0x2D,0x2E,0x2E,0x2A,0x2A,0x2A,0x29,0x0E,0x3F,0x38,0x32,0x2D,0x2E,0x31,0x2B,0x2C,0x2D,0x2E,0x2E,0x2A,0x2A,0x2A,0x29,0x0E,


//POW_CTRL

0x39,0x00,0x00,0x04,0xB9,0x33,0x28,0xCC,


//DCDC_SEL 

0x39,0x00,0x00,0x09,0xBB,0x06,0x7A,0x30,0x30,0x6C,0x60,0x50,0x70,


//VDDD_CTRL 

0x39,0x00,0x00,0x03,0xBC,0x38,0x3C,


//SETSTBA

0x39,0x00,0x00,0x03,0xC0,0x31,0x20,


//SETPANEL(default)  

0x39,0x00,0x00,0x02,0xC1,0x16,


//SETRGBCYC 

0x39,0x00,0x00,0x0A,0xC3,0x08,0x00,0x0A,0x10,0x08,0x54,0x45,0x71,0x2C,


//SETRGBCYC(default)  

0x39,0x00,0x00,0x12,0xC4,0x00,0xA0,0x79,0x0E,0x0A,0x16,0x79,0x0E,0x0A,0x16,0x79,0x0E,0x0A,0x16,0x82,0x00,0x03,



//SET_GD(default)

0x39,0x00,0x00,0x07,0xD0,0x04,0x0C,0x6B,0x0F,0x07,0x03,


//RAMCTRL(default)

0x39,0x00,0x00,0x03,0xD7,0x13,0x00, 


//---------------- PAGE2 --------------

0x39,0x01,0x00,0x02,0xDE,0x02, 



//DCDC_SET

0x39,0x00,0x00,0x06,0xB8,0x19,0xA0,0x2F,0x04,0x33,


//SETRGBCYC2

0x39,0x00,0x00,0x05,0xC1,0x10,0x66,0x66,0x01,


//---------------- PAGE0 --------------

0x39,0x00,0x00,0x02,0xDE,0x00, 



// sleep out

0x15,0x78,0x00,0x02,0x11,0x00,

//delay 120ms


//---------------- PAGE2 --------------

0x39,0x01,0x00,0x02,0xDE,0x02, 

//delay 1ms


//OSCM

0x39,0x01,0x00,0x04,0xC5,0x4E,0x00,0x00,

//delay 1ms


//SETMIPI_2

0x39,0x01,0x00,0x04,0xCA,0x30,0x20,0xF4,

//delay 1ms


//---------------- PAGE4 --------------

0x39,0x01,0x00,0x02,0xDE,0x04, 


//SETPHY3

0x39,0x01,0x00,0x02,0xD3,0x3C, 

//delay 1ms

//---------------- PAGE0 --------------

0x39,0x01,0x00,0x02,0xDE,0x00,

 

// display on

0x15,0x14,0x00,0x02,0x29,0x00, // SLEEPOUT

0x15,0x00,0x00,0x02,0x35,0x00,

CMD_END


};


static int mipi_dsi_send_cmds(struct sprd_dsi *dsi, void *data)

{

uint16_t len;

struct dsi_cmd_desc *cmds = data;


if ((cmds == NULL) || (dsi == NULL))

return -1;


for (; cmds->data_type != CMD_END;) {

len = (cmds->wc_h << 8) | cmds->wc_l;

mipi_dsi_gen_write(dsi, cmds->payload, len);

if (cmds->wait)

msleep(cmds->wait);

cmds = (struct dsi_cmd_desc *)(cmds->payload + len);

}

return 0;

}


static int jd9852_init(void)

{

struct sprd_dsi *dsi = &dsi_device;

struct sprd_dphy *dphy = &dphy_device;


mipi_dsi_lp_cmd_enable(dsi, true);

mipi_dsi_send_cmds(dsi, init_data);

mipi_dsi_set_work_mode(dsi, SPRD_MIPI_MODE_VIDEO);

mipi_dsi_state_reset(dsi);

mipi_dphy_hs_clk_en(dphy, true);


return 0;

}


static int jd9852_readid(void)

{


struct sprd_dsi *dsi = &dsi_device;

uint8_t read_buf[4] = {0};

mipi_dsi_lp_cmd_enable(dsi, true);

mipi_dsi_set_max_return_size(dsi, 1);

mipi_dsi_dcs_read(dsi, 0x04, &read_buf[0], 1);//0x98

mipi_dsi_dcs_read(dsi, 0x04, &read_buf[1], 1);//0x51

mipi_dsi_dcs_read(dsi, 0x04, &read_buf[2], 1);//0x00


pr_info("fae---read id id0=%x,id1=%x,id2=%x\n",read_buf[0],read_buf[1],read_buf[2]);


pr_info("fae---read id 0729-1\n");

return 0;


pr_err("jd9852 read id failed!\n");

return -1;

}


static int jd9852_power(int on)

{

if (on) {

sprd_gpio_request(NULL, CONFIG_LCM_GPIO_RSTN);

sprd_gpio_direction_output(NULL, CONFIG_LCM_GPIO_RSTN, 1);

mdelay(5);

sprd_gpio_direction_output(NULL, CONFIG_LCM_GPIO_RSTN, 0);

mdelay(10);

sprd_gpio_direction_output(NULL, CONFIG_LCM_GPIO_RSTN, 1);

mdelay(120);

} else {

sprd_gpio_direction_output(NULL, CONFIG_LCM_GPIO_RSTN, 0);

mdelay(5);

}

pr_info("fae--lcd reset!!!\n");

return 0;

}


static struct panel_ops jd9852_ops = {

.init = jd9852_init,

.read_id = jd9852_readid,

.power = jd9852_power,

};


static struct panel_info jd9852_info = {

/* common parameters */

.lcd_name = "lcd_jd9852_3lane_mipi_fhd",

.type = SPRD_PANEL_TYPE_MIPI,

.bpp = 24,

.width = 240,

.height = 320,

.pixel_clk = 6200000,//6.2MHZ   //像素时钟,按照计算来

.rgb_timing = {

.hfp = 40,

.hbp = 20,

.hsync = 4,

.vfp = 8,

.vbp = 6,

.vsync = 2,


/* MIPI DSI specific parameters */

/*.phy_freq = 660000,*/


.phy_freq = 192000,//set 152Mbps mipi速率

.lane_num = 1,


.work_mode = SPRD_MIPI_MODE_VIDEO,

.burst_mode = PANEL_VIDEO_BURST_MODE,

.nc_clk_en = false,

};


struct panel_driver jd9852_3lane_driver = {

.info = &jd9852_info,

.ops = &jd9852_ops,

};


调试过程中有遇到问题可以联系我