要学嵌入式 Linux 驱动开发肯定需要一个硬件平台,也就俗称的开发板,本书使用的是正点原子出品的I.MX6U-ALPHA/Mini
开发板。
ALPHA 是全功能开发板,Mini 是精简版。这两款都是以 NXP 的 I.MX6ULL 为核心的 Cortex-A7 开发平台,板载资源丰富,非常适合以前学过Cortex-M 内核单片机(比如 STM32)的工程进阶嵌入式 Linux 开发。
工欲善其事,必先利其器,本章我们就先来详细了解一下未来将会陪伴我们很长一段时间的朋友——I.MX6UXALPHA/Mini
开发平台。
了解I.MX6U-ALPHA/Mini
开发板原理图。
熟悉计算机。
I.MX6U-ALPHA 开发板采用底板+核心板的形式,I.MX6U-ALPHA 开发板底板采用 2 个2*30 的 3710F(公座)板对板连接器来同核心板连接,接插非常方便,底板上面的核心板接口原理图如图所示:
图中的 J1 和 J2 就是底板上的转接板接口,由 2 个 2*30PIN 的 3710F 板对板公座组成,总共引出了核心板上面 105 个 IO 口。
另外,还有:电源、PMIC_ON_REQ、ONOFF、USB、VBAT、RESET 等信号。
I.MX6U-ALPHA 开发板底板上面,总共引出了 31 个 IO 口,如图所示:
图中 JP6 就是引出的 IO,一共 31 个 IO,外加一个 GND。Cortex-A 系列的板子首要任务就是保证板子的稳定性,然后再考虑 IO 的引出。所以相比于 STM32 这种单片机,I.MX6U-ALPHA开发板引出的 IO 就要少很多了。
I.MX6U-ALPHA 开发板板载的 USB 串口和 I.MX6U 的串口是通过 JP5 连接起来的,如图所示:
图中 TXD/RXD 是相对 CH340C 来说的,也就是 USB 串口的发送和接收脚。而 UART1_RXD 和UART1_TXD 则是相对于 I.MX6U 来说的。这样,通过对接,就可以实现 USB 串口和 的串口通信了。
图中的 U20 和 U21 SGM3157 模拟开关,在底板掉电以后将 I.MX6U的 UART1_TXD 和UART1_RXD 这两个 IO 与CH340C 的 TXD 和 RXD 断开,因为 CH340C 的 TXD 和 RXD 这两个 IO 带有微弱的 3.3V 电压,如果不断开的话会将这微弱的 3.3V 电压引入到核心板上,可能会影响到启动。
ALPHA 底板载了 RGB LCD 接口,此部分电路如图所示:
图中,RGBLCD 就是 RGB LCD 接口,采用 RGB888 数据格式,并支持触摸屏(支持电阻屏和电容屏)。该接口仅支持 RGB 接口的液晶(不支持 MCU 接口的液晶),目前正点原子的RGB 接口 LCD 模块有:4.3 寸(ID:4342,480*272 和 ID:4384,800*480)、7 寸(ID:7084,800*480和 ID:7016,1024*600)和 10 寸(ID:1018,1280*800)等尺寸可选。
图中 3 个 SGM3157 模拟开关,用于控制来自 I.MX6U 的 **LCD_DATA23(LCD_R7)、LCD_DATA15(LCD_G7)和 LCD_DATA7(LCD_B7)**和来自 RGBLCD 屏的 LCD_DATA23S、LCD_DATA15S 和 LCD_DATA7S 的通断。
这是因为这几个信号有用来设置 I.MX6U 的BOOT_CFG4[7]/BOOT_CFG2[7]/BOOT_CFG1[7]
,同时又是 RGBLCD 屏的 ID 信号,因此他们存在冲突。如果不加切换,在启动的时候,I.MX6U 就可能读到错误的启动配置信息,从而导致启动失败(不运行代码)。加这三个模拟开关,就是为了让 I.MX6U 在启动的时候可以正常读取BOOT_CFG4[7]/BOOT_CFG2[7]/BOOT_CFG1[7]的值,同时在启动后,用户代码又可以读取正确的 RGBLCD ID 值。互不影响。三个 SGM3157 的使能信号默认都是由 LCD_VSYNC 控制(刚好满足 LCD 时序)。
图中的 I2C2_SCL 和 I2C2_SDA 为 I2C2 的两根数据线,分别连接到 UART5_TXD 和 UART5_RXD 这两个 IO 上。
BLT_PWM 是 LCD 的背光控制 IO,连接在 I.MX6U 的 GPIO1_IO8上,用于控制 LCD 的背光。
液晶复位信号 RESET 则是直接连接在开发板的复位按钮上,和MCU 共用一个复位电路。
I.MX6U 开发板的复位电路如图所示:
因为 I.MX6U 是低电平复位的,所以我们设计的电路也是低电平复位的。
I.MX6U 开发板的启动模式设置端口电路如图所示
I.MX6U 支持从多种不同的设备启动,关于 I.MX6U 的详细启动方式请参考《第九章I.MX6U 启动方式详解》。
I.MX6U-ALPHA 开发板的 VBAT 供电电路如图所示:
上图的 VDD_COIN_3V 通过核心板上的 BAT54C,接 VDD_SNVS_IN 脚,从而给核心板的 SNVS 区域供电。这部分原理图在核心板上,如图所示:
如图 所 示 , VDD_SNVS_IN 使 用 VDD_COIN_3V ( 接 CR1220 电 池 ) 和VDD_SNVS_3V3 混合供电的方式,在有外部电源(VDD_SNVS_3V3)的时候,CR1220 不给VDD_SNVS_IN 供电,而在外部电源断开的时候,则由 CR1220 给其供电。这样,VDD_SNVS_IN总是有电的,以保证 RTC 的走时。
I.MX6U-ALPAH 开发板板载了一个母头的 RS232 接口,电路原理图如图所示:
因为 RS232 电平不能直接连接到 I.MX6U,所以需要一个电平转换芯片。这里我们选择的是 SP3232(也可以用 MAX3232)来做电平转接,同时图中的 JP1 用来实现 RS232(UART3)/RS485的选择。所以这里的 RS232/RS485 都是通过串口 3 来实现的。图中 RS485_TX 和 RS485_RX 信号接在 SP3485 的 DI 和 RO 信号上。
I.MX6U-ALPAH 开发板板载的 RS485 接口电路如图所示:
RS485 电平也不能直接连接到 I.MX6U,同样需要电平转换芯片。这里我们使用 SP3485 来做485 电平转换,其中 R21 为终端匹配电阻,而 R19 和 R20 则是两个偏置电阻,以保证静默状态时 485 总线维持逻辑 1。
RS485_RX/RS485_TX 连接在 JP1 上面,通过 JP1 跳线来选择是否连接在 I.MX6U 上面,SP3485 的 RE 引脚连接通过一系列的电路连接到了 RS485_RX 引脚上,这样就可以通过RS485_RX 引脚来控制 RS485 的接收和发送状态,完全将 RS485 当做一个串口来使用。
正点原子 I.MX6U-ALPHA 开发板板载的 CAN 接口电路如图所示:
CAN 总线电平也不能直接连接到 I.MX6U,同样需要电平转换芯片。这里我们使用 TJA1050来做 CAN 电平转换,其中 R10 为终端匹配电阻。
CAN1_TX/CAN1_RX 直接连接在 I.MX6U 的 UART1_CTS/UART1_RTS 上面。
正点原子 I.MX6U-ALPHA 开发板板载了一颗一扩四的 USB HUB 芯片,用于将 I.MX6U 的 USB2 扩展为 4 个 USB HOST 接口,如图所示:
I.MX6U 带有两个 USB 接口,但是对于 Linux 应用来说两个 USB 太少了,如果我们要连接鼠标、键盘、U 盘等设备的时候两个 USB 口完全不够用。因此 I.MX6U-ALPHA 开发板通过GL850G 芯片将 I.MX6U 的 USB2 外扩出了 4 个 USB HOST 接口,其中有一路(UHB_USB2)外接了 4G 模块,因此提供给用户的就只剩下了 3 个 USB HOST 接口,如果 3 个 USB HOST 还不够用的话就可以外接一个 USB HUB。
I.MX6U-ALPHA 也有一路 USB OTG 接口,USB OTG 接口使用了 I.MX6U 的 USB1,USB
OTG 接口如图所示:
图中的 USB_OTG 就是 USB SLAVE 接口,可以将开发板作为 USB 从机,比如通过 USB进行系统烧写等。右侧的 USB1_HOST 是 USB HOST 接口,可以将开发板作为 USB 主机,这样就可以外接 USB 键盘/鼠标、U 盘等设备。这里正点原子将 USB OTG 的 SLAVE 和 HOST 接口都做到了开发板上,这样大家就不需要再额外去购买一个 USB OTG 线了,方便大家开发。
I.MX6U-ALPHA 开发板板载了一个光环境传感器,可以用来感应周围光线强度、接近距离和红外线强度等,该部分电路如图 所示:
图中的 U9 就是光环境传感器:AP3216C,它集成了光照强度、近距离、红外三个传感器功能于一身,被广泛应用于各种智能手机。该芯片采用 IIC 接口,连接在 I.MX6U 的 I2C1 接口上,IIC_SCL 和 IIC_SDA 分别连接在 UART4_TXD 和 UART4_RXD 上,AP_INT 是其中断输出脚,连接在 I.MX6U 的 GOIO1_IO01 上。
I.MX6U-ALIPHA 开发板板载了一个六轴传感器,电路如图所示:
六轴传感器芯片型号为:ICM20608,该芯片内部集成了:三轴加速度传感器和三轴陀螺仪,这里我们使用 SPI 接口来访问。
ICM20608 支持 IIC 和 SPI 两种接口,I.MX6U-ALPHA 开发板使用 SPI 接口,目的是为了在开发板上放一个 SPI 外设,学习 Linux 下的 SPI 驱动开发(因为笔者购买过很多 Linux 开发板,发现基本都没有 SPI 外设,不方便学习 SPI 驱动)。ICM20608 通过 SPI 接口连接到 I.MX6U 的 ECSPI3 接口上,SCLK、SDI、CS 和 SDO 分别连接到 I.MX6U 的 UART2_RXD(ECSPI3_SCLK)、UART2_CTS(ECSPI3_MOSI)、UART2_TXD(ECSPI3_SS0)和 UART2_RTS(ECSPI3_MISO)。
I.MX6U-ALPHA 开发板板载总共有 2 个 LED,其原理图如图 所示:
其中右侧的 PWR BLUE 是系统电源指示灯,为蓝色。DS0 为用户 LED 灯,连接在 I.MX6U的 GPIO1_IO03 上,此灯为红色。
I.MX6U-ALPHA 开发板板载 1 个输入按键,其原理图如图所示:
KEY0 用作普通按键输入,分别连接 I.MX6U 的 UART1_CTS 引脚上,这里使用外部 10K上拉电阻。
I.MX6U-ALPHA 开发板板载了一个摄像头模块接口,连接在 I.MX6U 的硬件摄像头接口(CSI)上面,其原理图如图所示:
图中 P1 接口可以用来连接正点原子摄像头模块。其中,I2C2_SCL 和 I2C2_SDA 是摄像头的 SCCB 接口,分辨连接在 I.MX6U 的 UART5_TXD 和 UART5_RXD 引脚上。CSI_RESET 和CSI_PWDN 这 2 个信号是不属于 I.MX6U 硬件摄像头接口的信号,通过普通 IO 控制即可,这两个线分别接在 I.MX6U 的 GPIO1_IO02 和 GPIO1_IO04。
此外,CSI_VSYNC/CSI_HSYNC/CSI_D0/CSI_D1/CSI_D2/CSI_D3/ CSI_D4/CSI_D5/CSI_D6/CSI_D7/CSI_PCLK/CSI_MCLK 等信号,接 I.MX6U 的硬件摄像头接口。
I.MX6U-ALPHA 开发板板载了一个有源蜂鸣器,其原理图如图所示:
有源蜂鸣器是指自带了震荡电路的蜂鸣器,这种蜂鸣器一接上电就会自己震荡发声。而如果是无源蜂鸣器,则需要外加一定频率(2~5Khz)的驱动信号,才会发声。这里我们选择使用有源蜂鸣器,方便大家使用。
BEEP 信号直接连接在 I.MX6U 的 SNVS_TAMPER1 引脚上,可以通过控制此引脚来控制蜂鸣器开关。
正点原子 ALPHA 开发板板载了一个 TF 卡(小卡)接口,其原理图如图所示:
图中 SD_CARD 为 TF 卡接口,该接口在开发板的底面。
TF 卡采用 4 位 uSDHC 方 式 驱 动 , 非 常 适 合 需 要 高 速 存 储 的 情 况 。 图 中 :USDHC1_DATA0~DATA3/USDHC1_CLK/USDHC1_CMD 分 别 连 接 在 I.MX6U 的SD1_DATA0~DATA3/SD1_CLK/SD1_CMD 引脚上。 USDHC1_CD_B 是 TF 卡检测引脚,用于检测 TF 卡或 SDIO WIFI 插拔过程,连接到 I.MX6U 的 UART1_RTS 引脚上。
注意:TF 卡接口和 SDIO WIFI 接口共用一个 SDIO,因此 TF 卡和 SDIO 不能同时使用!
I.MX6U-ALPHA 开发板板载一个 SDIO WIFI 接口,如图所示:
SDIO WIFI 接 口 用 于 连 接 正 点 原 子 出 品 的 RTL8189 SDIO WIFI 模 块 ,USDHC1_DATA0~DATA3/USDHC1_CLK/USDHC1_CMD 分别连接到 I.MX6U 的 I.MX6U 的SD1_DATA0~DATA3/SD1_CLK/SD1_CMD引脚上。WIFI_INT和WIFI_REG_ON连接到I.MX6U的 SNVS_TAMPER2 和 SNVS_TAMPER0 引脚上。
注意:TF 卡接口和 SDIO WIFI 接口公用一个 SDIO,因此 TF 卡和 SDIO 不能同时使用!!
I.MX6U-ALPHA 开发板板载 4G Mini PCIE 接口,如图所示:
U8 就是 Mini PCIE 接口的 4G 模块座子,用于连接 Mini PCIE 接口的 4G 模块,比如高新兴的 ME3630 模块。U11 是 Nano SIM 卡座,用于插入 Nano SIM 卡。4G 模块虽然采用 Mini PCIE 接口,但是实际走的 USB 接口,这里连接到了 GL850G 扩展出来的一个 USB HOST 接口上(USB_HUB2)。
I.MX6U-ALPHA 开发板板载了 ATK 模块接口,其原理图如图所示:
如图所示,JP2 是一个 1*6 的排座,可以用来连接正点原子推出的一些模块,比如:蓝牙串口模块、GPS 模块、MPU6050 模块、激光测距模块、手势识别模块和 RGB 彩灯模块等。有了这个接口,我们连接模块就非常简单,插上即可工作。
图中:UART3_RXD/UART3_TXD 连接到了 I.MX6U 的 UART3 上,和 RS232、RS485 共用一个串口,在使用 ATK 接口的时候需要将 JP1 跳线帽全部拔掉,防止 RS232 和 RS485 干扰到模块。而 GBC_KEY 和 GBC_LED 则分别连接在 I.MX6U 的 GPIO1_IO01 和 JTAG_MOD 这两个引脚上。
特别注意:GBC_LED/ GBC_KEY 和 AP_INT/6D_INT 共用 GPIO1_IO01 和JTAG_MOD。
I.MX6U-ALPHA 开发板板载了两个以太网接口(RJ45),分别为 ENET1 和 ENET2,其中ENET1 网口的原理图如图所示:
ENET2 网络接口原理图如图所示:
I.MX6U 内部自带两个网络 MAC 控制器,每个网络 MAC 需要外加一个 PHY 芯片来实现网络通信功能。这里我们选择的是 LAN8720A 这颗芯片作为 I.MX6U 的 PHY 芯片,该芯片采用 RMII 接口与 I.MX6U 通信,占用 IO 较少,且支持 auto mdix(即可自动识别交叉/直连网线)功能。板载两个自带网络变压器的 RJ45 头(HR91105A),一起组成两个 10M/100M 自适应网卡。
对于 ENET1 和 ENET2 共用 ENET_MDIO 和 ENET_MDC 这两根线,这两根线连接到了I.MX6U 的 GPIO1_IO06 和 GPIO1_IO07 这两个 IO 上。ENET1 和 ENET2 都有一个复位引脚,分别为ENET1_RSET 和 ENET2_RESET , 这 两 个 IO 分 别 连 接 到 了 I.MX6U 的SNVS_TAMPER7/SNVS_TAMPER8 这两个引脚上。
I.MX6U 开发板板载 WM8960 高性能音频编解码芯片,其原理图如图所示:
WM8960 是一颗低功耗、高性能的立体声多媒体数字信号编解码器。该芯片内部集成了 24位高性能 DAC&ADC,并且自段 EQ 调节,支持 3D 音效等功能。不仅如此,该芯片还结合了立体声差分麦克风的前置放大与扬声器、耳机和差分、立体声线输出的驱动,减少了应用时必需的外部组件,直接可以驱动耳机(16Ω@40mW)和喇叭(8Ω/1W),无需外加功放电路。
图中,SPK-和 SPK+连接了一个板载的 8Ω 1W 小喇叭(在开发板背面)。MIC 是板载的咪头,可用于录音机实验,实现录音。PHONE 是 3.5mm 耳机输出接口,可以用来插耳机。LINE_IN则是线路输入接口,可以用来外接线路输入,实现立体声录音。
该 芯 片 采 用 SAI 与 I.MX6U 的 SAI 接 口 连 接 , 图 中 :SAI2_TX_SYNC/SAI2_TX_BCLK/SAI2_RX_DATA/SAI2_TX_DATA/SAI2_MCLK/ 分别接在MCU 的:JTAG_TDO/JTAG_TDI/JTAG_TCK/JTAG_nTRST/JTAG_TMS 上。
特别注意:WM8960和 JTAG 共用了很多信号,所以 WM8960 和 JTAG 接口不能同时使用!并且,经过实测,WM8960会干扰到 JTAG,如果要使用 JTAG 那么就必须将与 WM8960 复用的这几根线断开!这也是为什么正点原子 I.MX6U-ALPHA 开发板开发板上面没有留 JTAG 接口的原因。
WM8960 需要一个 I2C 接口去配置,这里使用 I.MX6U 的 I2C2,I2C2_SCL 和 I2C2_SDA分别连接到了 I.MX6U 的 UART5_TXD 和 UART5_RXD 这两个引脚上。
I.MX6U-ALPHA 开发板板载的电源供电部分,其原理图如图所示:
图中,总共有 2 个稳压芯片:U16/U17,DC_IN 用于外部直流电源输入,经过 U16 DC-DC芯片转换为 5V 电源输出,其中 VD1 是防反接二极管,避免外部直流电源极性搞错的时候,烧坏开发板。
K1 为开发板的总电源开关,F1 为 2A 自恢复保险丝,用于保护 USB。U17 为 3.3V稳压芯片,给开发板提供 3.3V 电源。
这里还有 USB 供电部分没有列出来,其中 VUSB 就是来自 USB 供电部分。
I.MX6U-ALPHA 开发板板载了两组简单电源输入输出接口,其原理图如图所示:
图中,VOUT1 和 VOUT2 分别是 3.3V 和 5V 的电源输入输出接口,有了这 2 组接口,我们可以通过开发板给外部提供 3.3V 和 5V 电源了,虽然功率不大(最大 1000mA),但是一般情况都够用了,大家在调试自己的小电路板的时候,有这两组电源还是比较方便的。同时这两组端口,也可以用来由外部给开发板供电。
图中 D1 和 D2 为 TVS 管,可以有效避免 VOUT 外接电源/负载不稳的时候(尤其是开发板外接电机/继电器/电磁阀等感性负载的时候),对开发板造成的损坏。同时还能一定程度防止外接电源接反,对开发板造成的损坏。
I.MX6U-ALPHA 开发板板载了一个 USB 串口,其原理图如图所示:
USB 转串口,我们选择的是 CH340C,是国内芯片公司南京沁恒的产品,稳定性非常不错所以还是多支持下国产。CH340C 内置晶振,因此就不需要再在外面连接一个晶振。图中可以看出 CH340C 的电源为 3.3V,并且是独立供电的,U19 是一个 LDO 芯片,负责给 CH340C 提 供 3.3V 的电源。
CH340C 的电源不受开发板电源开关控制,只要接上 USB 线 CH340 就会上电。
图中 RXD/TXD 接 JP5 的 RXD/TXD,是 CH340 芯片的串口接收和发送脚,可以通过跳线帽连接到 I.MX6U 的串口 1 上。
USB_TTL 是一个 MiniUSB 座,提供 CH340C 和电脑通信的接口,同时可以给开发板和CH340C 供电,VUSB 就是来自电脑 USB 的电源,USB_TTL 是本开发板的主要供电口。
I.MX6U-Mini 开发板采用底板+核心板的形式,I.MX6U-Mini 开发板底板采用 2 个 2*30 的
3710F(公座)板对板连接器来同核心板连接,接插非常方便,底板上面的核心板接口原理图如
图所示:
图中两个插座就是底板上的转接板接口,由 2 个 2*30PIN 的 3710F 板对板公座组成,总共引出了核心板上面 105 个 IO 口,另外,还有:电源、PMIC_ON_REQ、ONOFF、USB、VBAT、RESET 等信号。
I.MX6U-Mini 开发板底板上面,总共引出了 41 个 IO 口,如图所示:
图中 P4 就是引出的 IO,一共 40 个 IO,外加一个 GND、一个 5V、一个 3.3V、一个 ON_OFF
引脚。
I.MX6U-Mini 开发板板载了一个 USB 串口,其原理图如图所示:
USB 转串口,我们选择的是 CH340C,是国内芯片公司南京沁恒的产品,稳定性非常不错所以还是多支持下国产。CH340C 内置晶振,因此就不需要再在外面连接一个晶振。图中可以看出 CH340C 的电源为 3.3V,并且是独立供电的,U7 是一个 LDO 芯片,负责给 CH340C 提供3.3V 的电源。
CH340C 的电源不受开发板电源开关控制,只要接上 USB 线 CH340 就会上电。USB_TTL 是一个 MiniUSB 座,提供 CH340C 和电脑通信的接口,同时可以给开发板和CH340C 供电,VUSB 就是来自电脑 USB 的电源,USB_TTL 是本开发板的主要供电口。
图 中的 U12 和 U13 是 SGM3157 模拟开关,在底板掉电以后将 I.MX6U 的 UART1_TXD 和UART1_RXD 这两个 IO 与 CH340C 的 TXD 和 RXD 断开,因为 CH340C 的 TXD 和 RXD 这两个 IO 带有微弱的 3.3V 电压,如果不断开的话会将这微弱的 3.3V 电压引入到核心板上,可能会影响到启动。
Mini 底板载了 RGB LCD 接口,此部分电路如图所示:
图中,RGBLCD 就是 RGB LCD 接口,采用 RGB888 数据格式,并支持触摸屏(支持电阻屏和电容屏)。该接口仅支持 RGB 接口的液晶(不支持 MCU 接口的液晶),目前正点原子的RGB 接口 LCD 模块有:4.3 寸(ID:4342,480*272 和 ID:4384,800*480)、7 寸(ID:7084,800*480
和 ID:7016,1024*600)和 10 寸(ID:1018,1280*800)等尺寸可选。
图中 3 个 SGM3157 模拟开关,用于控制来自 I.MX6U 的 LCD_DATA23(LCD_R7)、LCD_DATA15(LCD_G7)和 LCD_DATA7(LCD_B7)和来自 RGBLCD 屏的 LCD_DATA23S、LCD_DATA15S 和 LCD_DATA7S 的通断。这是因为这几个信号有用来设置 I.MX6U 的BOOT_CFG4[7]/BOOT_CFG2[7]/BOOT_CFG1[7],同时又是 RGBLCD 屏的 ID 信号,因此他们
存在冲突。如果不加切换,在启动的时候,I.MX6U 就可能读到错误的启动配置信息,从而导致
启动失败(不运行代码)。
加这三个模拟开关,就是为了让 I.MX6U 在启动的时候可以正常读取BOOT_CFG4[7]/BOOT_CFG2[7]/BOOT_CFG1[7]的值,同时在启动后,用户代码又可以读取正确的 RGBLCD ID 值。互不影响。三个 SGM3157 的使能信号默认都是由 LCD_VSYNC 控制(刚好满足 LCD 时序)。
图中的 I2C2_SCL 和 I2C2_SDA 为 I2C2 的两根数据线,分别连接到 UART5_TXD 和 UART5_RXD这两个 IO 上。BLT_PWM 是 LCD 的背光控制 IO,连接在 I.MX6U 的 GPIO1_IO8上,用于控制 LCD 的背光。液晶复位信号 RESET 则是直接连接在开发板的复位按钮上,和MCU 共用一个复位电路。
I.MX6U-Mini 开发板的复位电路如图所示:
因为 I.MX6U 是低电平复位的,所以我们设计的电路也是低电平复位的。
I.MX6U-Mini 开发板的启动模式设置端口电路如图所示:
I.MX6U 支持从多种不同的设备启动,关于 I.MX6U 的详细启动方式请参考《第九章I.MX6U 启动方式详解》。
I.MX6U-Mini 开发板的 VBAT 供电电路如图所示:
上图的 VDD_COIN_3V 通过核心板上的 BAT54C,接 VDD_SNVS_IN 脚,从而给核心板的 SNVS 区域供电。这部分原理图在核心板上,如图所示:
如 图 5.4.7.2 所 示 , VDD_SNVS_IN 使 用 VDD_COIN_3V ( 接 CR1220 电 池 ) 和VDD_SNVS_3V3 混合供电的方式,在有外部电源(VDD_SNVS_3V3)的时候,CR1220 不给VDD_SNVS_IN 供电,而在外部电源断开的时候,则由 CR1220 给其供电。这样,VDD_SNVS_IN总是有电的,以保证 RTC 的走时。
I.MX6U-Mini 开发板板载的 RS485 接口电路如图所示:
RS485 电平也不能直接连接到 I.MX6U,同样需要电平转换芯片。这里我们使用 SP3485 来 做485 电平转换,其中 R28 为终端匹配电阻,而 R26 和 R25 则是两个偏置电阻,以保证静默状态时 485 总线维持逻辑 1。
RS485_RX/RS485_TX 连接在 JP3 上面,通过 JP3 跳线来选择是否连接在 I.MX6U 上面,SP3485 的 RE 引脚连接通过一系列的电路连接到了 RS485_RX 引脚上,这样就可以通过RS485_RX 引脚来控制 RS485 的接收和发送状态,完全将 RS485 当做一个串口来使用。
正点原子 I.MX6U-Mini 开发板板载的 CAN 接口电路如图所示:
CAN 总线电平也不能直接连接到 I.MX6U,同样需要电平转换芯片。这里我们使用 TJA1050来做 CAN 电平转换,其中 R14 为终端匹配电阻。CAN1_TX/CAN1_RX 直接连接在 I.MX6U 的UART1_CTS/UART1_RTS 上面。
正点原子 I.MX6U-Mini 开发板有一路 USB HOST 接口,如图所示:
从图可以看出,USB HOST 连接到了 I.MX6ULL 的 USB2 接口上。
I.MX6U-Mini 也有一路 USB OTG 接口,USB OTG 接口使用了 I.MX6U 的 USB1,USB OTG接口如图所示:
图中的 USB_OTG 接口可以做为 SLAVE,也可以作为 HOST,如果要做 HOST 的话需要自己购买 Mini USB OTG 线。
I.MX6U-Mini 开发板板载总共有 2 个 LED,其原理图如图所示:
其中下方的 PWR BLUE 是系统电源指示灯,为蓝色。LED1 为用户 LED 灯,连接在 I.MX6U的 GPIO1_IO03 上,此灯为红色。
I.MX6U-Mini 开发板板载 1 个输入按键,其原理图如图所示:
KEY0 用作普通按键输入,分别连接 I.MX6U 的 UART1_CTS 引脚上,这里使用外部 10K上拉电阻。
I.MX6U-Mini 开发板板载了一个摄像头模块接口,连接在 I.MX6U 的硬件摄像头接口(CSI)上面,其原理图如图所示:
图中 P1 接口可以用来连接正点原子摄像头模块。其中,I2C2_SCL 和 I2C2_SDA 是摄像头的 SCCB 接口,分辨连接在 I.MX6U 的 UART5_TXD 和 UART5_RXD 引脚上。CSI_RESET 和CSI_PWDN 这 2 个信号是不属于 I.MX6U 硬件摄像头接口的信号,通过普通 IO 控制即可,这两个线分别接在 I.MX6U 的 GPIO1_IO02 和 GPIO1_IO04。
此外,CSI_VSYNC/CSI_HSYNC/CSI_D0/CSI_D1/CSI_D2/CSI_D3/CSI_D4/CSI_D5/CSI_D6/CSI_D7/CSI_PCLK/CSI_MCLK 等信号,接 I.MX6U 的硬件摄像头接口。
I.MX6U-Mini 开发板板载了一个有源蜂鸣器,其原理图如图所示:
有源蜂鸣器是指自带了震荡电路的蜂鸣器,这种蜂鸣器一接上电就会自己震荡发声。而如果是无源蜂鸣器,则需要外加一定频率(2~5Khz)的驱动信号,才会发声。这里我们选择使用有源蜂鸣器,方便大家使用。
BEEP 信号直接连接在 I.MX6U 的 SNVS_TAMPER1 引脚上,可以通过控制此引脚来控制蜂鸣器开关。
正点原子 I.MX6U-Mini 开发板板载了一个 TF 卡接口,其原理图如图所示:
图中 SD_CARD 为 TF 卡接口,TF 卡采用 4 位 uSDHC 方式驱动,非常适合需要高速存储的情况。图中:USDHC1_DATA0~DATA3/USDHC1_CLK/USDHC1_CMD 分别连接在 I.MX6U的 SD1_DATA0~DATA3/SD1_CLK/SD1_CMD 引脚上。 USDHC1_CD_B 是 TF 卡检测引脚,用于检测 TF 卡或 SDIO WIFI 插拔过程,连接到 I.MX6U 的 UART1_RTS 引脚上。
注意:TF 卡接口和 SDIO WIFI 接口共用一个 SDIO,因此 TF 卡和 SDIO 不能同时使用!
I.MX6U-Mini 开发板板载一个 SDIO WIFI 接口,如图所示:
I.MX6U-Mini 开发板板载了 ATK 模块接口,其原理图如图所示:
如图所示,U9 是一个 1*6 的排座,可以用来连接正点原子推出的一些模块,比如:蓝牙串口模块、GPS 模块、MPU6050 模块、激光测距模块、手势识别模块和 RGB 彩灯模块等。有了这个接口,我们连接模块就非常简单,插上即可工作。
图中:UART3_RXD/UART3_TXD 连接到了 I.MX6U 的 UART3 上,和 RS232、RS485 共用一个串口,在使用 ATK 接口的时候需要将 JP1 跳线帽全部拔掉,防止 RS232 和 RS485 干扰到模块。而 GBC_KEY 和 GBC_LED 则分别连接在 I.MX6U 的 GPIO1_IO01 和 JTAG_MOD 这两个引脚上。
I.MX6U-Mini 开发板板载了一个以太网接口(RJ45): ENET2,其中 ENET2 网口的原理图如图所示:
I.MX6U 内部自带两个网络 MAC 控制器:ENET1 和 ENET2,每个网络 MAC 需要外加一个 PHY 芯片来网络通信功能。这里我们选择的是 LAN8720A 这颗芯片作为 I.MX6U 的 PHY 芯片,该芯片采用 RMII 接口与 I.MX6U 通信,占用 IO 较少,且支持 auto mdix(即可自动识别交叉/直连网线)功能。板载两个自带网络变压器的 RJ45 头(HR91105A),一起组成两个 10M/100M自适应网卡。
图中 ENET_MDIO 和 ENET_MDC 这两根线连接到了 I.MX6U 的 GPIO1_IO06 和 GPIO1_IO07 这两 个 IO 上 。 ENET2_RESET 网络复位引脚,连接到了 I.MX6U 的SNVS_TAMPER8 这两个引脚上。
I.MX6U-Mini 开发板板载的电源供电部分,其原理图如图所示:
图中,总共有 2 个稳压芯片:U6/U4,DC_IN 用于外部直流电源输入,经过 U6 这颗 DC-DC 芯片转换为 5V 电源输出,其中 VD1 是防反接二极管,避免外部直流电源极性搞错的时候,烧坏开发板。K1 为开发板的总电源开关,F1 为 2A 自恢复保险丝,用于保护 USB。U4 为 3.3V稳压芯片,给开发板提供 3.3V 电源。这里还有 USB 供电部分没有列出来,其中 VUSB 就是来自 USB 供电部分。
I.MX6U-Mini 开发板板载了两组简单电源输入输出接口,其原理图如图所示:
图中,JP1 和 JP22 分别是 3.3V 和 5V 的电源输入输出接口,有了这 2 组接口,我们可以通过开发板给外部提供 3.3V 和 5V 电源了,虽然功率不大(最大 1000mA),但是一般情况都够用了,大家在调试自己的小电路板的时候,有这两组电源还是比较方便的。同时这两组端口,也可以用来由外部给开发板供电。
图中 D1 和 D2 为 TVS 管,可以有效避免 VOUT 外接电源/负载不稳的时候(尤其是开发板外接电机/继电器/电磁阀等感性负载的时候),对开发板造成的损坏。同时还能一定程度防止外接电源接反,对开发板造成的损坏。
I.MX6U-ALPHA 开发板配套的 I.MX6U 核心板,采用 MCIMX6Y2CVM08AB(800MHz,实际 792MHz)作为主控 CPU,为工业级。自带 32KB 的 L1 指令和数据 Cache、128KB 的 Cache,集成NEON,集成双精度硬件浮点计算单元 VFPv3,并具有 128KB OCRAM、2 个通用定时器(GPT)、4个周期定时器(EPIT)、8 个 PWM、1 个 SDMA 控制器、4 个 ECSPI、3 个看门狗、3 个 SAI、4 个 IIC、7 个串口、2 个 USB(高速,带 PHY)、2 个 FlexCAN、2 个 12 位ADC、1 个 SPDIF 接口、1 个 SRTC、1 个 RTC、2 个 USDHC 接口、1 个 RGB LCD 控制器(ELCDIF)、2 个 10/100M 以太网 MAC 控制器、1 个摄像头接口、1 个硬件随机数生成器、以及 124 个通用 IO 口等,根据芯片型号的不同主频可以为 528Mhz、700MHz(实际 696MHz)、800MHz(实际 792MHz),轻松应对各种应用。SOC 部分的原理图如图 ~图(因为原理图比较大,缩小下来可能有点看不清,请大家打开开发板光盘的原理图进行查看)所示:
MCIMX6Y2CVM05AB/08AB 芯片的原理图由 5 个部分组成,接下来依次看一下这五部分
的具体内容:
图 1:此部分原理图主要是 I.MX6U 的部分 IO 原理图,比如 SNVS_TAMPER0~9、JTAG 外设 IO、USDHC1 外设 IO、UART 外设 IO、USB 外设 IO 等。
图 2:此部分原理图也是 I.MX6U 的 IO 原理图,主要包括 NAND Flash 外设 IO、USDHC2 外设 IO、CSI 摄像头 IO 等。
图 3:此部分原理图也是 I.MX6U 的 IO 原理图,包括 LCD 外设 IO、ENET 外设 IO、GPIO1_IO01~09 这一组 GPIO。
图 4:此部分原理图是 I.MX6U 的 DRAM 外设 IO。用于连接DDR 设备,比如正点原子 ALPHA 开发板所使用的 DDR3L。
图 5:此部分原理图是 I.MX6U 的电源部分。
I.MX6U 核心板采用 2 个 2*30 的 3710M(母座)板对板连接器来同底板连接(在转接板底
面),接插非常方便,转接板上面的底板接口原理图如图所示:
图中,J1 和 J2 是 2 个 2*30 的板对板母座(3710M),和底板的接插非常方便,方便大家嵌入自己的项目中去。该接口总共引出 105 个 IO 口,另外,还有 USB、电源、复位、ONOFF 等信号。
I.MX6U NAND 版本核心板板载了一个 NAND Flash,此部分电路如图所示:
对于 Linux 系统而言,是需要一个存储数据、系统的存储芯片,比如 QSPI Flash、NAND Flash、EMMC 等。正点原子的 I.MX6U-ALPHA 开发板有两种核心板,这两种核心板的 FLASH存储芯片不同,一个使用的 NAND FLASH、一个使用的 EMMC。图 5.5.3.1 中的是 NAND Flash的原理图,经过测试,可以支持 256MB、512MB、2GB 的 NAND FLASH 存储芯片。
I.MX6U EMMC 核心板板载了 8GB 的 EMMC,此部分电路如图所示:
EMMC 也是存储 Flash,相比 NAND Flash,EMMC 使用简单(和 SD 类似)、速度快、容量高。目前 EMMC 已经逐渐的取代了 NAND Flash,尤其是在手机、平板领域。
I.MX6U 核心板板载了 DDR3L,此部分电路如图所示:
图中,U5 就是 DDR3L 芯片,根据配置的不同,一共有两种型号,分别为:NT5CC256M16EPEK(512MB)和 NT5CC128M16JR-EK(256MB)。该芯片挂在 I.MX6U 的 MMDC 接口上。
I.MX6U 对于供电有严格的要求,尤其是上电顺序,正点原子的 I.MX6U 核心板供电主要分 5 部分:SNVS 供电、DCDC_3V3 供电、ARM/SOC 内核供电、DDR3L 供电和 SD 卡供电,我们依次来看一下,首先是 SNVS 供电,I.MX6U 的数据手册要求,SNVS 必须最先上电,此部分供电电路如图 所示:
图中,U7 是一颗 LDO 芯片,将 5V 转化为 3.3V,作为 SNVS_3V3,由于 SNVS_3V3 电流不大,所以一个 LDO 芯片就可以了。接下来是 DCDC_3V3,也就是核心板的主电源,如图所示:
U8 是一个 DCDC 芯片,用于将 5V 转换为 3.3V,但是电流大,MP2144 最大输出 2A 大电流,因此作为核心板的 3.3V 主电源。这里要注意,U8 的使能引脚使用了 I.MX6U 的 PMIC_ON_REQ 引脚来控制,当 SNVS_3V3 供给 I.MX6U 的 VDD_SNVS_IN 引脚以后,I.MX6U的 PMIC_ON_REQ 引脚就会输出高电平,从而产生 DCDC_3V3,DCDC_3V3 也是 I.MX6U 的 VDD_HIGH_IN 电源。接下来就是ARM/SOC 内核电源,如图所示:
U6 也是一片 DCDC,用于产生 ARM/SOC 内核电压,此内核电压可以通过 I.MX6U 的GPIO_DVFS 和 PMIC_STBY_REQ 来调节。U6 的使能脚连接到了 DCDC_3V3_PG 信号上,此信号是由 U8 产生的,当 U8 输出 3.3V 电压以后 DCDC_3V3_PG 信号就会产生,为一个高电平信号。通过 DCDC_3V3_PG 来控制 VDD_ARM_SOC_IN 电源的产生,这样就保证了VDD_HIGH_IN 比ARM_SOC_IN 先上电的要求。接下来看一下 DDR3L 电源,正点原子的I.MX6U 核心板使用的是 DDR3L,DDDR3L 的工作电压为 1.35V,此部分电源电路如图所示:
U11 也是一个 DCDC 芯片,用于将 5V 电源转换为 1.35V 供 DDR3L 使用。接下来看一下SD 卡部分电路,如图所示:
U9 是一片 LDO,用于将 5V 电源转为 3.3V 或 1.8V 供 SD 卡使用,因为高速 SD 卡需要1.8V 供电,因此此路电源电压是可调的,通过 SD1_VSELECT 来选择使用 3.3V 还是 1.8V, SD1_VSELECT 连接到了 I.MX6U 的 GPIO1_IO05 上。最后还有 I.MX6U 其他外设电源,如图所示:
为了让大家更好的使用正点原子 I.MX6U-ALPHA 开发板,我们在这里总结该开发板使用
的时候尤其要注意的一些问题,希望大家在使用的时候多多注意,以减少不必要的问题。
①、1 个 USB 供电最多 500mA,且由于导线电阻存在,供到开发板的电压,一般都不会有5V,如果使用了很多大负载外设,比如 4.3 寸屏、网络、摄像头模块等,那么可能引起 USB 供电不够,所以如果是使用 4.3 屏的朋友,或者同时用到多个模块的时候,建议大家使用一个独立电源供电。 如果没有独立电源,建议可以同时插 2 个 USB 口,并插上仿真器,这样供电可以更足一些。
②、当你想使用某个 IO 口用作其他用处的时候,请先看看开发板的原理图,该 IO 口是否有连接在开发板的某个外设上,如果有,该外设的这个信号是否会对你的使用造成干扰,先确定无干扰,再使用这个 IO。
③、开发板上的跳线帽比较多,大家在使用某个功能的时候,要先查查这个是否需要设置跳线帽,以免浪费时间。
④、当液晶显示白屏的时候,请先检查液晶模块是否插好(拔下来重插试试)。
⑤、开发板的 USB OTG 的 USB SLAVE 和 USB HOST 共用同一个 USB 口,所以,他们不可以同时使用。使用的时候多加注意。
⑥、当需要从底板上拆转接板下来的时候,请左右晃动取下,不要太大幅度,否则有可能拆坏座子。
至此,本手册的实验平台(正点原子 I.MX6U-ALPHA 开发板)的硬件部分就介绍完了,了解了整个硬件对我们后面的学习会有很大帮助,有助于理解后面的代码,在编写软件的时候,可以事半功倍,希望大家细读!另外正点原子开发板的其他资料及教程更新,都可以在技术论坛 下载到,大家可以经常去这个论坛获取更新的信息。
查看本文最近更新请点击