MX6ULL官方SDK移植之踩坑 网口驱动

一、引言

NXP MX6ULL 网口移植其实主要修改底层驱动程序,LWIP协议通用,一般不用修改,这里主要和大家分享在Linux环境下移植修改网口驱动程序。网口程序移植主要修改可分为三步进行:
(1)第一步:确认网口引脚连接
        确认复位电路(复位引脚置1,高电平);
        确认接口模式(RMII/MII接口模式);
        确认PHY芯片地址是否正确。
(2)第二步:PHY芯片的初始化
        phy芯片初始化过程就是对其读写过程,根据网口芯片手册,确保读写值正确。
(3)第三步:lwip 协议
        一般情况下,lwip协议基本上不用修改,lwip协议都是通用的。其应用程序可以根据自己的需求进行修改。

二、背景

开发环境: Linux
硬件环境:正点原子MX6ULL开发板

三、移植

3.1 环境搭建

mx6ull 基于 Linux 裸机开发环境搭建这里不做介绍,不知道的朋友可以到正点原子论坛、野火论坛或NXP官网中去查找资料,这几个网站上的相关学习资料丰富得很。
需要注意的一点: Linux环境下的MX6ULL裸机下载工具推荐使用野火家的,正点原子家的MX6ULL裸机下载工具目前还不支持官网MX6ULL SDK源码下载,也可以直接使用官网的下载工具。

3.2 网口硬件连接

NXP官网I.MX6ULL开发板使用KSZ8081 PHY芯片;正点原子I.MX6ULL开发板使用的是LAN8720 PHY芯片。它们的网口引脚连接情况基本都一样,唯独复位引脚连接不同。复位引脚连接电路需要根据开发板原理图进行修改,如下图所示:

正点原子 ENET1

官网 ENET1         根据上图所示,正点原子开发板 I.MX6ULL 与 phy 网口芯片复位引脚连接网络标识为: SNVS_TAMPER7——>ENET1_RST

IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER7_GPIO5_IO07, 0U);
IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER7_GPIO5_IO07, IOMUXC_SNVS_SW_PAD_CTL_PAD_DSE(4U) |IOMUXC_SNVS_SW_PAD_CTL_PAD_SPEED(2U) |IOMUXC_SNVS_SW_PAD_CTL_PAD_PKE_MASK |IOMUXC_SNVS_SW_PAD_CTL_PAD_PUS(2U) |IOMUXC_SNVS_SW_PAD_CTL_PAD_HYS_MASK );

3.3 PHY芯片地址

确认phy芯片地址是否正确,一般不同phy芯片地址可能也会不一样,LAN8720 芯片的地址为:

//#define BOARD_ENET0_PHY_ADDRESS (0x02U) /* Phy address of enet port 0. */
//#define BOARD_ENET1_PHY_ADDRESS (0x01U) /* Phy address of enet port 1. */
#define BOARD_ENET0_PHY_ADDRESS (0x01U) /* Phy address of enet port 0. */
#define BOARD_ENET1_PHY_ADDRESS (0x00U) /* Phy address of enet port 1. */

3.4 确认接口模式(RMII/MII接口模式)

正点原子 IMX6ULL开发板网口使用LAN8720网口芯片,使用的是RMII接口模式,如下面代码所示,官网 IMX6ULL开发板网口同样也是使用RMII接口模式,这里不用修改。

void ENET_GetDefaultConfig(enet_config_t *config)
{/* Checks input parameter. */assert(config);/* Initializes the MAC configure structure to zero. */memset(config, 0, sizeof(enet_config_t));/* Sets MII mode, full duplex, 100Mbps for MAC and PHY data interface. */config->miiMode = kENET_RmiiMode;config->miiSpeed = kENET_MiiSpeed100M;config->miiDuplex = kENET_MiiFullDuplex;/* Sets the maximum receive frame length. */config->rxMaxFrameLen = ENET_FRAME_MAX_FRAMELEN;
}

3.5 PHY芯片的初始化

phy芯片的初始化过程的是就是对phy读写数据,不同的phy芯片,对它读写的数据也不同。只需要修改其对应的宏定义值就可以了,即修改phy.h头文件。

/*!@brief Defines the mask flag of operation mode in control two register*/
#define PHY_CTL2_REMOTELOOP_MASK 0x0004U    /*!< The PHY remote loopback mask. */
#define PHY_CTL2_REFCLK_SELECT_MASK 0x0080U /*!< The PHY RMII reference clock select. */
// #define PHY_CTL1_10HALFDUPLEX_MASK 0x0001U  /*!< The PHY 10M half duplex mask. */
// #define PHY_CTL1_100HALFDUPLEX_MASK 0x0002U /*!< The PHY 100M half duplex mask. */
// #define PHY_CTL1_10FULLDUPLEX_MASK 0x0005U  /*!< The PHY 10M full duplex mask. */
// #define PHY_CTL1_100FULLDUPLEX_MASK 0x0006U /*!< The PHY 100M full duplex mask. */
// #define PHY_CTL1_SPEEDUPLX_MASK 0x0007U     /*!< The PHY speed and duplex mask. */
#define PHY_CTL1_10HALFDUPLEX_MASK 0x0004U  /*!< The PHY 10M half duplex mask. */
#define PHY_CTL1_100HALFDUPLEX_MASK 0x0008U /*!< The PHY 100M half duplex mask. */
#define PHY_CTL1_10FULLDUPLEX_MASK 0x0014U  /*!< The PHY 10M full duplex mask. */
#define PHY_CTL1_100FULLDUPLEX_MASK 0x0018U /*!< The PHY 100M full duplex mask. */
#define PHY_CTL1_SPEEDUPLX_MASK 0x001cU     /*!< The PHY speed and duplex mask. */
#define PHY_CTL1_ENERGYDETECT_MASK 0x10U    /*!< The PHY signal present on rx differential pair. */
#define PHY_CTL1_LINKUP_MASK 0x100U         /*!< The PHY link up. */
#define PHY_LINK_READY_MASK (PHY_CTL1_ENERGYDETECT_MASK | PHY_CTL1_LINKUP_MASK)

3.6 lwip 协议

移植官网SDK代码LWIP协议部分基本上不用修改,直接可以使用,也可以根据自己的需求来修改APP应用程序。

四、坑区

官网SDK包虽然没有提供网口enet2的程序,但是也可以在enet1基础上修改扩展,如初始化网口gpio引脚、复位引脚,再确认接口模式(模式为:rmii)和phy地址就差不多就可以了?
        还不可以,这里还需要注意的一个地方就是使能启用网口2模式,根据mx6ull参考手册,启用enet2模式需要对IOMUXC_GPR1通用寄存器18位置1,我之前调试时没有注意到这个地方折腾了一下午,网口2的状态灯显示异常,还以为开发板硬件出了啥问题。

IOMUXC_GPR->GPR1 |= 0x40000;

浪里白瞟刚入坑,有不对的地方还望大佬在下面评论区评论指点…

i.MX6ULL裸机篇(二)NXP官方SDK移植之踩坑 网口驱动相关推荐

  1. 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第十二章官方SDK移植试验

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 第十二章官方SDK移植试验 在上一章中, ...

  2. NXP官方SDK、固件库、帮助文档下载

    1.下载链接 https://mcuxpresso.nxp.com/en/select 2.如果有NXP官方账户则按照如下1,2,3步骤进行登录,如果没有NXP官方账户则点击第4步进行注册 3.按照如 ...

  3. Unity接入AWS S3过程,AWS SDK for Unity 踩坑记录

    AWS S3,亚马逊的资源服务器服务,最近在研究这一块内容.记录一下踩坑的内容. 研究了AWS SDK for unity和AWS SDK for .net 两部分 unity很难接,主要原因是官方没 ...

  4. ZYNQ SDK开发调试踩坑指南

    关注+星标公众号,及时获取更多技术分享~  作者 | 冰茶奥利奥 微信公众号 | 嵌入式电子创客街 目录 坑1:裸机Ps串口收数问题 坑2:多个中断不能同时使用问题 坑3:block design中D ...

  5. Istio 1.2.4 最新版安装 官方Bookinfo例子部署 踩坑

    一.安装步骤: 1.下载所需文件及镜像 wget https://github.com/istio/istio/releases/download/1.0.0/istio-1.0.0-linux.ta ...

  6. MySQL导入官方数据库world防踩坑完全操作

    1.在MySQL官方网站下载官方数据集world,链接.下载zip格式文件然后解压即可,是一个名叫world.sql的文件 2.打开电脑中mysql安装目录下的my.ini文件,找到secure_fi ...

  7. CAD二次开发--polyline线宽设置踩坑总结【以转换CASS地形图情况为例】

    今天遇到个需求,就是说将我开发的cad插件绘图成果,转换为南方CASS地形图格式[南方CASS是测绘中最常用的基础性软件].所以说就不可避免的遇到线宽的设置问题,比如"等级公路主线" ...

  8. Hi3531DV100开发环境的搭建(含交叉编译器的安装及官方SDK安装)

    (一)交叉编译环境的安装(hisiv500) 海思3531d采用arm-hisiv500-linux作为交叉编译工具,首先将arm-hisiv500-linux.tgz拷贝到共享目录,然后通过cp命令 ...

  9. Wormhole流程搭建测试踩坑总结(二)

    Wormhole 是宜信技术研发中心开发的一个一站式流式处理云平台解决方案.Wormhole 面向大数据流式处理项目的开发管理运维人员,致力于提供统一抽象的概念体系,直观可视化的操作界面,简单流畅的配 ...

最新文章

  1. 二分查找算法为什么要先排序
  2. Ueditor1.4.3上传视频IE下无法播放的问题
  3. VS2008工具,两种加入库的方法。 设置程序运行时目录
  4. 拓扑排序 确定比赛名次
  5. 通配符在DNS系统中的应用
  6. Python基础(使用print()函数输出格式化字符串)
  7. DFINITY创始人:目前仍以Q1路线图为主要目标,正在进行创世启动前的安全审计
  8. 异常:Invalid character found in the request target. The valid characters are defined in RFC 3986
  9. 内存二三事: Xcode 内存图、Instruments 可视化检测循环引用
  10. 同一个tomcat部署多个项目导致启动失败
  11. netflix-hystrix-简例
  12. 下十页分页php,织梦二次开发实现栏目分页前十页后十页功能
  13. 使用docker搭建db2数据库
  14. DB9 串口母对母转接头是个坑
  15. 开源BT磁力搜索引擎收集
  16. OpenCv4在Win10 VS2019上环境搭建
  17. ai图片怎么把图中的字改掉_如何修改图片上的文字
  18. xmake中add_files的使用
  19. R:数据分析-----汽车数据可视化
  20. VR全景开发学习链接Three.js

热门文章

  1. grep与正则表达式匹配
  2. UPC 2020年春混合个人训练第十四场
  3. textarea 属性placeholder
  4. Nginx Rewrite跳转功能
  5. WEB前端网页设计 CSS Position(定位)
  6. 北碚去哪学计算机好,西南大学北碚校区在哪 环境好不好
  7. Python 实验一 抓狐狸小游戏 查找Word中加粗和红色文本
  8. 如何通过.dbf文件还原数据库
  9. 纸黄金投资的优势和风险都有哪些
  10. 带你了解信号和UTP线缆