调了几天DCI,终于搞好了,坑真多。
OV2640设置为SVGA,RBG565输出480*272大小。使用DE直接显示在LCD上。
目前还有几个问题待解决:1:PE11输出CLK_OUT 还没搞定,目前使用PE12 PWM0输出24M,飞线给PE11.
2: 显示上有点蓝色条纹,很规律,不确定是否是摄像头没有配置好。
3:OV的数码变焦和一些参数设定 待研究
TBD:摄像头图层和其他显示图层叠加等后面在研究。
使用硬件为tiny200 R3。摄像头OV2640,LCD480*272,附件bin文件大家可以试试。别忘了PE12,PE11要接在一起,或者给PE11一个24M时钟。
BIN文件:f1c100s_Tiny200r3_CamTest.zip
视频如下:
离线
大佬流批,裸机驱动可以参考不?
离线
感谢分享
离线
感谢分享
离线
楼组牛掰
离线
厉害了,怎么调的这么清晰。。
离线
颜色感觉有点不对 好像偏蓝色
离线
大佬威武
离线
继续给F1C100S填坑,PE11管脚导出clkout,给CIF摄像头的提供时钟源
https://whycan.com/t_6906.html
离线
请问烧写是进入FEL后,用以下命令的吗:
sunxi-fel -p spiflash-write 0 f1c100s_Tiny200r3_CamTest.bin
离线
怎么用DE直接显示在LCD上呢
离线
你好 sjshe3326,
看了你那塊 D133 88-Pin 多介面 LCD 開發板的設計,把 RGB/LVDS/MIPI/8080/SPI 都打到同一塊板上,做這個工作的人應該不多。能看出你對顯示介面選型的研究很深。
我是台灣的 Robinson。我們做了一顆 USB Display SoC(MI-8808),想跟你分享:現在 USB → MIPI DSI 變成一個新方向,可以解決「主控板顯示介面已用滿,但要加副屏」的問題。
你之前提過 D133 的「資料缺乏、MIPI 調試困難」,我們的 8808 SDK 是開放的,有完整 reference design + MIPI timing 工具,免費寄樣品板給你玩玩看怎麼樣?
不需要 NDA,純技術交流。
Robinson
奔馳科技 Racer Tech
robinson@racer-tech.com
离线
Ozelot 说:
Hello sjshe3326.
Can you show CSI and camera initialization functions?
CSI 初始化代码如下,不含CSI CLK的部分
void CSI_init(void)
{
// 连续采集的图像数据 防止在缓存内 //
u32_t regVal;
// CSI打开时钟 //
// CSI 使能 CSI_EN = 1 //
write32(CSI_BAISADDR + CSI_EN, read32(CSI_BAISADDR + CSI_EN) | (1<<0));
// CSI 配置 inYUV 422 UYVY out pass VREF+ HREF+ CLK+
// write32(CSI_BAISADDR + CSI_CFG, (3<<20) | (0<<16) | (2<<8) | (1<<2) | (1<<1) | (1<<0)); //YUV
// CSI配置: 输入格式RAW, 输出格式Pass Through, Vref极性-正, Href极性-正, Clk上升沿有效 //
write32(CSI_BAISADDR + CSI_CFG, (0<<20) | (0<<16) | (2<<8) | (1<<2) | (1<<1) | (1<<0)); //RGB
// CSI CAP video mode 关闭视频和照片采样模式 //
write32(CSI_BAISADDR + CSI_CAP, (0<<1) | (0<<0));
// CSI scale mask 抽样功能 0表示丢弃当前数据,V按照4行循环,H按照16byte循环,FFFF表示不丢弃数据 //
write32(CSI_BAISADDR + CSI_SCALE, 0x0F00FFFF);//read32(CSI_BAISADDR + CSI_SCALE) | (0x0F<<24) | (0xFFFF<<0));
// CSI FIFO012 ADDR 由于使用PassThrough方式,只使用FIFO0 FIFO1/2忽略 FIFO0 AB分别设置未2个缓存区 //
write32(CSI_BAISADDR + CSI_FIFO0_BUFA, (&fb_mem[0][0]));
write32(CSI_BAISADDR + CSI_FIFO0_BUFB, (&fb_mem[1][0]));
write32(CSI_BAISADDR + CSI_FIFO1_BUFA, (&fb_mem[1][0]));
write32(CSI_BAISADDR + CSI_FIFO1_BUFB, (&fb_mem[1][0]));
write32(CSI_BAISADDR + CSI_FIFO2_BUFA, (&fb_mem[1][0]));
write32(CSI_BAISADDR + CSI_FIFO2_BUFB, (&fb_mem[1][0]));
// CSI DoubleBuffer mode 不适用双缓存模式 //
write32(CSI_BAISADDR + CSI_BUF_CTL, (0<<2) | (0<<0));
// FIFO 每行buf缓存 字节长度 //
write32(CSI_BAISADDR + CSI_BUF_LEN, 960);
// HSIZE VSIZE
write32(CSI_BAISADDR + CSI_HSIZE, (960 << 16) | ( 0 << 0)); // 每行有效时钟(数据)长度, 起始时钟数量 //
write32(CSI_BAISADDR + CSI_VSIZE, (360 << 16) | ( 0 << 0)); // 每帧有效行数, 起始数据行数 //
// CSI interrupt
//write32(CSI_BAISADDR + CSI_INT_EN, (0<<7) | (1<<1) | (1<<0));
// 中断设置
request_irq(IRQ_CSI, f1c100s_csi_interrupt, 0);
}camera OV2640 初始化代码如下
uint8_t CamInit_OV2640(void)
{
// 检测ChipID //
uint16_t id = CamCheck_OV2640();
if (0x2642 != id)//CamCheck_OV2640())
{
printf("Cam ChipID : Error(%04x) \r\n",id);
while(1);
}
// 初始化参数 //
SCCB_WriteReg(OV2640_DEVADDR, 1, OV2640_DSP_RA_DLMT, 0x01); // 操作sensor寄存器
SCCB_WriteReg(OV2640_DEVADDR, 1, OV2640_SENSOR_COM7, 0x80); // 软复位OV2640
delay_1ms(10);
// 写入参数表 采用SXGA分辨率(800*600) //
for (uint16_t i = 0;i < sizeof(ov2640_uxga_init_reg_tbl)/2; i++)
{
//SCCB_WriteReg(OV2640_DEVADDR, 1, ov2640_VGA_init_reg_tbl[ i][0], ov2640_VGA_init_reg_tbl[ i][1]);
SCCB_WriteReg(OV2640_DEVADDR, 1, ov2640_uxga_init_reg_tbl[ i][0], ov2640_uxga_init_reg_tbl[ i][1]);
}
delay_1ms(1);
return 0; // ok //
}//UXGA(1600*1200)
const uint8_t ov2640_uxga_init_reg_tbl[][2]=
{
0xff, 0x00,
0x2c, 0xff,
0x2e, 0xdf,
0xff, 0x01,
0x3c, 0x32,
//
0x11, 0x00,
0x09, 0x02,
0x04, 0x00,//水平镜像,垂直翻转
0x13, 0xe5,
0x14, 0x48,
0x2c, 0x0c,
0x33, 0x78,
0x3a, 0x33,
0x3b, 0xfB,
//
0x3e, 0x00,
0x43, 0x11,
0x16, 0x10,
//
0x39, 0x92,
//
0x35, 0xda,
0x22, 0x1a,
0x37, 0xc3,
0x23, 0x00,
0x34, 0xc0,
0x36, 0x1a,
0x06, 0x88,
0x07, 0xc0,
0x0d, 0x87,
0x0e, 0x41,
0x4c, 0x00,
0x48, 0x00,
0x5B, 0x00,
0x42, 0x03,
//
0x4a, 0x81,
0x21, 0x99,
//
0x24, 0x40,
0x25, 0x38,
0x26, 0x82,
0x5c, 0x00,
0x63, 0x00,
0x46, 0x00,
0x0c, 0x3c,
//
0x61, 0x70,
0x62, 0x80,
0x7c, 0x05,
//
0x20, 0x80,
0x28, 0x30,
0x6c, 0x00,
0x6d, 0x80,
0x6e, 0x00,
0x70, 0x02,
0x71, 0x94,
0x73, 0xc1,
0x3d, 0x34,
0x5a, 0x57,
//
0x12, 0x00,//UXGA 1600*1200
0x17, 0x11,
0x18, 0x75,
0x19, 0x01,
0x1a, 0x97,
0x32, 0x36,
0x03, 0x0f,
0x37, 0x40,
//
0x4f, 0xca,
0x50, 0xa8,
0x5a, 0x23,
0x6d, 0x00,
0x6d, 0x38,
//
0xff, 0x00,
0xe5, 0x7f,
0xf9, 0xc0,
0x41, 0x24,
0xe0, 0x14,
0x76, 0xff,
0x33, 0xa0,
0x42, 0x20,
0x43, 0x18,
0x4c, 0x00,
0x87, 0xd5,
0x88, 0x3f,
0xd7, 0x03,
0xd9, 0x10,
0xd3, 0x82,
//
0xc8, 0x08,
0xc9, 0x80,
//
0x7c, 0x00,
0x7d, 0x00,
0x7c, 0x03,
0x7d, 0x48,
0x7d, 0x48,
0x7c, 0x08,
0x7d, 0x20,
0x7d, 0x10,
0x7d, 0x0e,
//
0x90, 0x00,
0x91, 0x0e,
0x91, 0x1a,
0x91, 0x31,
0x91, 0x5a,
0x91, 0x69,
0x91, 0x75,
0x91, 0x7e,
0x91, 0x88,
0x91, 0x8f,
0x91, 0x96,
0x91, 0xa3,
0x91, 0xaf,
0x91, 0xc4,
0x91, 0xd7,
0x91, 0xe8,
0x91, 0x20,
//
0x92, 0x00,
0x93, 0x06,
0x93, 0xe3,
0x93, 0x05,
0x93, 0x05,
0x93, 0x00,
0x93, 0x04,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
//
0x96, 0x00,
0x97, 0x08,
0x97, 0x19,
0x97, 0x02,
0x97, 0x0c,
0x97, 0x24,
0x97, 0x30,
0x97, 0x28,
0x97, 0x26,
0x97, 0x02,
0x97, 0x98,
0x97, 0x80,
0x97, 0x00,
0x97, 0x00,
//
0xc3, 0xef,
0xa4, 0x00,
0xa8, 0x00,
0xc5, 0x11,
0xc6, 0x51,
0xbf, 0x80,
0xc7, 0x10,
0xb6, 0x66,
0xb8, 0xA5,
0xb7, 0x64,
0xb9, 0x7C,
0xb3, 0xaf,
0xb4, 0x97,
0xb5, 0xFF,
0xb0, 0xC5,
0xb1, 0x94,
0xb2, 0x0f,
0xc4, 0x5c,
//
0xc0, 0xc8,
0xc1, 0x96,
0x8c, 0x00,
0x86, 0x3d,
0x50, 0x00,
0x51, 0x90,
0x52, 0x2c,
0x53, 0x00,
0x54, 0x00,
0x55, 0x88,
0x5a, 0x90,
0x5b, 0x2C,
0x5c, 0x05,
0xd3, 0x02,//auto设置要小心
0xc3, 0xed,
0x7f, 0x00,
0xda, 0x09,
0xe5, 0x1f,
0xe1, 0x67,
0xe0, 0x00,
0xdd, 0x7f,
0x05, 0x00,
}; 离线