(正点原子)NXP官方UBOOT添加阿尔法开发板

添加阿尔法开发板

一、添加阿尔法开发板默认配置文件

        ①、在ubuntu下创建vscode工程,找到NXP,EVK的配置文件

        ②、将配置文件拷贝一份,重新命名为你自己板子的配置文件

                第一行imximage.cfg是编译后的u-boot.imx给u-boot.bin添加的头部信息。

                将其改成

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_alientek_
emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"

                因为board/freescale文件夹下每有mx6ull_alientek_emmc的文件夹所以得添加一个

                第四行改成

CONFIG_TARGET_MX6ULL_ALIENTEK_EMMC=y

二、添加板子对应的头文件

        不同板子,有一些不同的配置信息,一般在一个头文件中配置,每个板子有一个,对于NXP官方的EVK板子,头文件在include/configs里面。

        将头文件中EVK的改成ALIENTEK_EMMC。

        mx6ull_alientek_emmc.h 里面有很多宏定义,这些宏定义基本用于配置 uboot,也有一些
        I.MX6ULL 的配置项目。如果我们自己要想使能或者禁止 uboot 的某些功能,那就在
        mx6ull_alientek_emmc.h 里面做修改即可。

三、添加板子对应的板级文件夹

        每个板子都有一个板级文件,将EVK板级文件拷贝成ALIENTEK的板级文件。

                                ​​​​​​​        

        将mx6ull_alientek_emmc中  .c文件,Makefile,imximage.cfg,kconfig,MAINTAINERS文件的evk改成alientek。

                

     

四、修改uboot的配置界面

        arch/arm/cpu/armv7/mx6/Kconfig加入板子的图形界面的配置

        新建一个shell脚本编译一下。

        编译成.o文件说明编译成功。

修改驱动

一、LCD修改

        ①、LCD使用的IO是否正确

        ②、LCD配置参数是否正确

                

        注:根据不同型号的TFTLCD配置不同。

        以1024X600为例:

        name: LCD 名字,要和环境变量中的 panel 相等。
        xres、 yres: LCD X 轴和 Y 轴像素数量。
        pixclock:像素时钟,每个像素时钟周期的长度,单位为皮秒。
        left_margin: HBP,水平同步后肩。
        right_margin: HFP,水平同步前肩。
        upper_margin: VBP,垂直同步后肩。
        lower_margin: VFP,垂直同步前肩。
        hsync_len: HSPW,行同步脉宽。
        vsync_len: VSPW,垂直同步脉宽。
        vmode: 大多数使用 FB_VMODE_NONINTERLACED,也就是不使用隔行扫描。
        可以看出,这些参数和我们第二十四章讲解 RGB LCD 的时候参数基本一样,唯一不同的
        像素时钟 pixclock 的含义不同,以正点原子的 7 寸 1024*600 分辨率的屏幕(ATK7016)为例,
        屏幕要求的像素时钟为 51.2MHz,

        编译下载后:

        

        panel环境变量表示LCD的ID所以还得修改panel。

        在mx6ull_alientek_emmc.h文件中,吧所有的panel都改成7016

        重新编译后屏幕显示NXP官网 的界面。

二、网络驱动修改

简介:

        I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET,需要外接一个 PHY 芯片来实
现网络通信功能,也就是内部 MAC+外部 PHY 芯片的方案。大家可能听过 DM9000 这个网络
芯片,在一些没有内部 MAC 的 CPU 中,比如三星的 2440, 4412 等,就会采用 DM9000 来实
现联网功能。 DM9000 提供了一个类似 SRAM 的访问接口,主控 CPU 通过这个接口即可与
DM9000 进行通信, DM9000 就是一个 MAC+PHY 芯片。这个方案就相当于外部 MAC+外部
PHY

        I.MX6UL/ULL 有两个网络接口 ENET1 和 ENET2,正点原子的 I.MX6U-ALPHA 开发板提
供了这两个网络接口,其中 ENET1 和 ENET2 都使用 LAN8720A 作为 PHY 芯片。

        LAN8720驱动,因为所有的PHY,前32个寄存器都是一样的,因此,uboot里面已经写好了通用的PHY驱动,所以不用修改。


1、ENET1

        ENET1 的网络 PHY 芯片为 LAN8720A,通过 RMII 接口与 I.MX6ULL 相连,正点原子
I.MX6U-ALPHA 开发板的 ENET1 引脚与 NXP 官方的 I.MX6ULL EVK 开发板基本一样,唯独
复位引脚不同。从图 可以看出,正点原子 I.MX6U-ALPHA 开发板的 ENET1 复位引脚
ENET1_RST 接到了 I.M6ULL 的 SNVS_TAMPER7 这个引脚上。
LAN8720A 内部是有寄存器的, I.MX6ULL 会读取 LAN8720 内部寄存器来判断当前的物
理链接状态、连接速度(10M 还是 100M)和双工状态(半双工还是全双工)。 I.MX6ULL 通过 MDIO
接口来读取 PHY 芯片的内部寄存器, MDIO 接口有两个引脚, ENET_MDC 和 ENET_MDIO,
ENET_MDC 提供时钟, ENET_MDIO 进行数据传输。一个 MDIO 接口可以管理 32 个 PHY 芯
片,同一个 MDIO 接口下的这些 PHY 使用不同的器件地址来做区分, MIDO 接口通过不同的
器件地址即可访问到相应的 PHY 芯片。 I.MX6U-ALPHA 开发板 ENET1 上连接的 LAN8720A
器件地址为 0X0,所示我们要修改 ENET1 网络驱动的话重点就三点:
        ①、 ENET1 复位引脚初始化。
        ②、 LAN8720A 的器件 ID。
        ③、 LAN8720 驱动

2、ENET2

        关于 ENET2 网络驱动的修改也注意一下三点:
        ①、 ENET2 的复位引脚,从图 33.2.7.2 可以看出, ENET2 的复位引脚 ENET2_RST 接到了
I.MX6ULL 的 SNVS_TAMPER8 上。
        ②、 ENET2 所使用的 PHY 芯片器件地址,从图 33.2.7.2 可以看出, PHY 器件地址为 0X1。
        ③、 LAN8720 驱动, ENET1 和 ENET2 都使用的 LAN8720,所以驱动肯定是一样的。
2、网络 PHY 地址修改

网络PHY地址修改:

        在mx6ull_alientek_emmc.h中

       ①、 ADDR:改为对应网口的ADDR地址

        ②、删除 uboot  mx6ull_alientek_emmc.c中 74LV595 的驱动代码

        IOX 开头的宏定义是 74LV595 的相关 GPIO,因为 NXP 官方I.MX6ULL EVK 开发板使用 74LV595 来扩展 IO,两个网络的复位引脚就是由 74LV595 来控制的。正点原子的 I.MX6UALPHA 开发板并没有使用 74LV595,因此我们将代码删除掉,替换为如下所示代码

#define ENET1_RESET IMX_GPIO_NR(5, 7)
#define ENET2_RESET IMX_GPIO_NR(5, 8)

        删除74LV595引脚配置和初始化。

        

        在borad_init()中,初始化了74LV595,也将其删掉

        ③、添加阿尔法开发板网络复位引脚的驱动

        

        ④、修改 drivers/net/phy/phy.c 文件中的函数 genphy_update_link

#ifdef CONFIG_PHY_SMSC
	static int lan8720_flag = 0;
	int bmcr_reg = 0;
	if (lan8720_flag == 0) {
		bmcr_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
		phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);
		while(phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR) & 0X8000) {
			udelay(100);
		}
		phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr_reg);
		lan8720_flag = 1;
	}
#endif

        注: 在mx6ull_alientek_emmc.h中要定义宏CONFIG_PHY_SMSC

 

验证

        重新编译 uboot,然后将 u-boot.bin 烧写到 SD 卡中并启动

        

        显示Net:FEC1证明修改没问题,接下来ping一下ubuntu

        

        ipaddr:开发板ID自己设置。

        ethaddr:开发板网卡MAC地址,一般固定的。

        gatewayip:默认网关

        netmask:子网掩码,固定的。

        serverip:ubuntu地址。

        证明网络添加正确。

        

        

  • 33
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tofu_Cabbage

你的打赏是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值