JD9852+深超2.4-MIPI-1Lane在展讯SC7731E调试
0赞JD9832是一颗支持市场常规QVGA玻璃的液晶驱动IC,自带GRAM,所以像SPI,MCU,MIPI-CMD MODE都支持,RGB就不更不要说了,相比ST7782M只能配BOE,直接把它秒成渣,相信能带领QVGA走上爆款巅峰,不过目前价格不亲民但性能优秀,相我信上量后成本肯定会降下来。
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依次出现如下画面,可用来验证初始化是否写成功
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,
};
调试过程中有遇到问题可以联系我