在uboot中添加logo,lvds接口的lcd显示不正常,出现波动。网上说是lvds时钟频率的问题。

使用示波器测量之后,发现频率是60M,而lcd最大频率才46.8M。

因此就需要更改uboot中lvds的时钟,本文介绍lvds的时钟配置。

参考链接:

  https://community.nxp.com/docs/DOC-172312

  https://community.nxp.com/docs/DOC-93617

  https://community.nxp.com/thread/306801

  https://community.nxp.com/thread/355690

  https://community.nxp.com/thread/378887

  https://community.nxp.com/thread/305115

  https://community.nxp.com/thread/395103

原理分析

datasheet: IMX6SDLRM

imx6 使用了2个晶振:

  外部低频时钟: 32kHz or 32.768kHz

  外部高频时钟: 24MHz

LVDS的时钟就是图中LDB_DI0_IPU和LDB_DI0_IPU

18.5.1.3 PLL reference clock

There are several PLLs in this chip.
PLL1 - ARM PLL (typical functional frequency 800 MHz)
PLL2 - System PLL (functional frequency 528 MHz)
PLL3 - USB1 PLL (functional frequency 480 MHz)
PLL4 - Audio PLL
PLL5 - Video PLL
PLL6 - ENET PLL
PLL7 - USB2 PLL (functional frequency 480 MHz)
PLL8 - MLB PLL

18.5.1.3.1 ARM PLL

This PLL synthesizes a low jitter clock from a 24 MHz reference clock. The clock output
frequency for this PLL ranges from 650 MHz to 1.3 GHz. The output frequency is
selected by a 7-bit register field CCM_ANALOG_PLL_ARM[DIV_SELECT].
PLL output frequency = Fref * DIV_SEL/2

CCM_ANALOG_PLL_ARM寄存器

根据寄存器计算:pll0输出范围

  24M * 54 / 2 = 648M

  24M * 108 / 2 = 1296M

18.5.1.3.3 System PLL

This PLL synthesizes a low jitter clock from the 24 MHz reference clock. The PLL has
one output clock, plus 3 PFD outputs. The System PLL supports spread spectrum
modulation for use in applications to minimize radiated emissions. The spread spectrum
PLL output clock is frequency modulated so that the energy is spread over a wider
bandwidth, thereby reducing peak radiated emissions. Due to this feature support, the
associated lock time of this PLL is longer than other PLLs in the SoC that do not support
spread spectrum modulation.
......
Although this PLL does have a DIV_SELECT register field, it is intended that this PLL
will only be run at the default frequency of 528 MHz.

Analog System PLL Control Register

  24M * 20 = 480M

  24M * 22 = 528M

18.5.1.4 Phase Fractional Dividers (PFD)

There are several PFD outputs from the System PLL and USB1 PLL.
Each PFD output generates a fractional multiplication of the associated PLL’s VCO
frequency. Where the output frequency is equal to Fvco*18/N, N can range from 12-35.
The PFDs allow for clock frequency changes without forcing the relock of the root PLL.
This feature is useful in support of dynamic voltage and frequency scaling (DVFS). See
CCM Analog Memory Map/Register Definition.

频率最小值:

  480M * 18 / 35 = 246M

  246M / 7 = 35M

代码更改

board/freescale/mx6q_sabresd/mx6q_sabresd.c

void lcd_enable(void)
{......
#elif defined CONFIG_MX6DL /* CONFIG_MX6Q *//** IPU1 HSP clock tree:* osc_clk(24M)->pll3_usb_otg_main_clk(480M)->* pll3_pfd_540M(540M)->ipu1_clk(270M)*//* pll3_usb_otg_main_clk *//* divider */writel(0x3, ANATOP_BASE_ADDR + 0x18);/* pll3_pfd_540M *//* divider */writel(0x3F << 8, ANATOP_BASE_ADDR + 0xF8);writel(0x10 << 8, ANATOP_BASE_ADDR + 0xF4);/* enable */writel(0x1 << 15, ANATOP_BASE_ADDR + 0xF8);/* ipu1_clk */reg = readl(CCM_BASE_ADDR + CLKCTL_CSCDR3);/* source */reg |= (0x3 << 9);/* divider */reg &= ~(0x7 << 11);reg |= (0x1 << 11);writel(reg, CCM_BASE_ADDR + CLKCTL_CSCDR3);/** ipu1_pixel_clk_x clock tree:* osc_clk(24M)->pll2_528_bus_main_clk(528M)->* pll2_pfd_352M(452.57M)->ldb_dix_clk(64.65M)->* ipu1_di_clk_x(64.65M)->ipu1_pixel_clk_x(64.65M)*//* pll2_528_bus_main_clk *//* divider *///Tony
//1. ----------  将pll2由528M更改为480M    ------------------reg = readl(ANATOP_BASE_ADDR + 0x34);  reg &= ~(1 << 0);                      // 24M * 20 = 480Mwritel(reg, ANATOP_BASE_ADDR + 0x34);//writel(0x1, ANATOP_BASE_ADDR + 0x34); // 24M * 22 = 528M/* pll2_pfd_352M *//* disable */writel(0x1 << 7, ANATOP_BASE_ADDR + 0x104);/* divider */
//2. ---------更改分频参数为35.  480 * 18 / 35 = 246M ----------writel(0x3F, ANATOP_BASE_ADDR + 0x108);writel(0x23, ANATOP_BASE_ADDR + 0x104);//原来设置 528M * 18 / 21 = 452.57M
//  writel(0x3F, ANATOP_BASE_ADDR + 0x108);
//  writel(0x15, ANATOP_BASE_ADDR + 0x104);/* ldb_dix_clk *//* source */
//3. --------- 选择时钟源, pll2_pfd0 -----------//ldb_di1_clk_sel Selector for ldb_di1 clock multiplexer//NOTE: Multiplexor should be updated when both input and output clocks are gated.//000 pll5 clock//001 derive clock from PLL2 PFD0//010 derive clock from PLL2 PFD2//011 derive clock from mmdc_ch1 clock//100 derive clock from pll3_sw_clk//101-111 Reservereg = readl(CCM_BASE_ADDR + CLKCTL_CS2CDR);reg |= (0x9 << 9);writel(reg, CCM_BASE_ADDR + CLKCTL_CS2CDR);/* divider */reg = readl(CCM_BASE_ADDR + CLKCTL_CSCMR2);reg |= (0x3 << 10);writel(reg, CCM_BASE_ADDR + CLKCTL_CSCMR2);/* pll2_pfd_352M *//* enable after ldb_dix_clk source is set */writel(0x1 << 7, ANATOP_BASE_ADDR + 0x108);//ipu1 di1 root clock multiplexer : derive clock from ldb_di1_clk//ipu1 di0 root clock multiplexer : derive clock from ldb_di0_clkreg = readl(CCM_BASE_ADDR + CLKCTL_CHSCCDR);reg &= ~0xE07;reg |= 0x803;//ipu1 di1 root clock multiplexer : derive clock from ldb_di1_clk//ipu1 di0 root clock multiplexer : derive clock from ldb_di0_clkwritel(reg, CCM_BASE_ADDR + CLKCTL_CHSCCDR);
#endif  /* CONFIG_MX6DL */......

Author

Tony Liu

2016-8-23, Shenzhen

imx6 uboot lvds clock相关推荐

  1. imx6 uboot splash image

    跟踪uboot代码,了解imx6 splash image的生成过程. 涉及文件: ./cpu/arm_cortexa8/start.S ./board/freescale/mx6q_sabresd/ ...

  2. 紫枫术河 imx6 uboot的mtd分区总结(rootfs为ubi文件系统) imx6 uboot的mtd分区总结(rootfs为ubi文件系统)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_29729577/article/details/51130209 此文章基于U-Boot 20 ...

  3. imx6调试Lvds屏幕技术笔记

    打开相对应的设备树文件 mxcfb1: fb@0 {compatible = "fsl,mxc_sdc_fb";disp_dev = "ldb";//显示设备i ...

  4. imx6 u-boot 启动 Can't find PMIC:PFUZE100

    最近在将imx官方源码imx-4.1-krogoth里面的u-boot移植到一个淘宝开发板的过程中,遇到了u-boot启动时提示错误:Can't find PMIC:PFUZE100 原因如下: 淘宝 ...

  5. uboot readme

    前面是 Uboot 的发展,下载地址,如何获得帮助,以及版本说明 Directory Hierarchy: 目录层次 ==================== - board          Boa ...

  6. ITE联阳半导体 HDMI2.0b/MHL2.2转LVDS芯片 支持3D

    IT68052:HDMI 2.0b/MHL2.2转LVDS芯片 1. Features   Dual port HDMI2.0b Receiver   Support 2 HDMI1.4/HDMI2. ...

  7. SSC 扩频时钟技术(0)

    何谓SSC??? 展频spread spectrum(SSC),所有会产生频率信号的电子组件都是潜在的电磁干扰( EMI )源,这些信号将会影响如收音机.电视或者移动电话等电子产品的正常运作.SSC让 ...

  8. imx6 LCD 参数配置(lvds为例)

    目前imx6的BSP开发中,lvds的参数配置一般在两个地方:  1. uboot的CMDLINE的参数设置,形如:  video=mxcfb0:dev=ldb,bpp=32  2. uboot板级代 ...

  9. 迅为IMX6开发板QT系统LVDS和HDMI双屏异显和同显

    本文档介绍如何在 iMX6 开发板下,QtE 系统中,实现 LVDS 和 HDMI 的双屏异显和同显. 首先开发板分别连接 9.7 寸屏和 HDMI 显示器,然后使用 MfgTool 工具烧写 QT ...

最新文章

  1. 关于string类型的字符串是否以\0结尾
  2. IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的......
  3. #589. 图图的游戏
  4. spring-beans模块分析
  5. [转载]如何限制一个类对象只在栈(堆)上分配空间?
  6. 高并发编程知识体系阅读总结
  7. 读取xml并转换为Java对象
  8. org manual翻译--3.6 Org-Plot
  9. HTML自我介绍表格代码制作
  10. 解决:蓝奏云下载链接没法打开问题
  11. word批量删除单选、多选题的答案
  12. RFC5766-TURN协议
  13. 【PAT】A1099. Build A Binary Search Tree (30)
  14. 模拟信号、数字信号,信号是如何被处理的?
  15. 关于京东API超级搜索接口
  16. 全球及中国集成电路(IC)制造行业运行前景与发展规划建议报告2022版
  17. String字符串方法
  18. python爬虫简易到进阶实战篇——(1)
  19. ABA问题分析与解决
  20. 2020VMware认证全介绍

热门文章

  1. CodeIgniter源码分析(一) 目录结构
  2. [转]php curl 设置host curl_setopt CURLOPT_HTTPHEADER 指定host
  3. 在linux下修改oracle字符集
  4. hdu4971 流-最大权闭包
  5. 操作系统原理第一章:操作系统概述
  6. 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备 DEX 字节码文件 )
  7. 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )
  8. 【运筹学】人工变量法总结 ( 人工变量法解的分析 | 标准型变换 | 构造单位阵 | 目标函数引入 M | 计算检验数 | 选择入基变量 | 选择出基变量 | 中心元变换 | ) ★★
  9. 【词汇】ab-前缀、al-后缀、norm-词根
  10. 【Netty】使用 Netty 开发 HTTP 服务器 ( HTTP 请求过滤 )