i.MX6ULL裸机篇(二)NXP官方SDK移植之踩坑 网口驱动
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移植之踩坑 网口驱动相关推荐
- 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第十二章官方SDK移植试验
1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 第十二章官方SDK移植试验 在上一章中, ...
- NXP官方SDK、固件库、帮助文档下载
1.下载链接 https://mcuxpresso.nxp.com/en/select 2.如果有NXP官方账户则按照如下1,2,3步骤进行登录,如果没有NXP官方账户则点击第4步进行注册 3.按照如 ...
- Unity接入AWS S3过程,AWS SDK for Unity 踩坑记录
AWS S3,亚马逊的资源服务器服务,最近在研究这一块内容.记录一下踩坑的内容. 研究了AWS SDK for unity和AWS SDK for .net 两部分 unity很难接,主要原因是官方没 ...
- ZYNQ SDK开发调试踩坑指南
关注+星标公众号,及时获取更多技术分享~ 作者 | 冰茶奥利奥 微信公众号 | 嵌入式电子创客街 目录 坑1:裸机Ps串口收数问题 坑2:多个中断不能同时使用问题 坑3:block design中D ...
- Istio 1.2.4 最新版安装 官方Bookinfo例子部署 踩坑
一.安装步骤: 1.下载所需文件及镜像 wget https://github.com/istio/istio/releases/download/1.0.0/istio-1.0.0-linux.ta ...
- MySQL导入官方数据库world防踩坑完全操作
1.在MySQL官方网站下载官方数据集world,链接.下载zip格式文件然后解压即可,是一个名叫world.sql的文件 2.打开电脑中mysql安装目录下的my.ini文件,找到secure_fi ...
- CAD二次开发--polyline线宽设置踩坑总结【以转换CASS地形图情况为例】
今天遇到个需求,就是说将我开发的cad插件绘图成果,转换为南方CASS地形图格式[南方CASS是测绘中最常用的基础性软件].所以说就不可避免的遇到线宽的设置问题,比如"等级公路主线" ...
- Hi3531DV100开发环境的搭建(含交叉编译器的安装及官方SDK安装)
(一)交叉编译环境的安装(hisiv500) 海思3531d采用arm-hisiv500-linux作为交叉编译工具,首先将arm-hisiv500-linux.tgz拷贝到共享目录,然后通过cp命令 ...
- Wormhole流程搭建测试踩坑总结(二)
Wormhole 是宜信技术研发中心开发的一个一站式流式处理云平台解决方案.Wormhole 面向大数据流式处理项目的开发管理运维人员,致力于提供统一抽象的概念体系,直观可视化的操作界面,简单流畅的配 ...
最新文章
- 二分查找算法为什么要先排序
- Ueditor1.4.3上传视频IE下无法播放的问题
- VS2008工具,两种加入库的方法。 设置程序运行时目录
- 拓扑排序 确定比赛名次
- 通配符在DNS系统中的应用
- Python基础(使用print()函数输出格式化字符串)
- DFINITY创始人:目前仍以Q1路线图为主要目标,正在进行创世启动前的安全审计
- 异常:Invalid character found in the request target. The valid characters are defined in RFC 3986
- 内存二三事: Xcode 内存图、Instruments 可视化检测循环引用
- 同一个tomcat部署多个项目导致启动失败
- netflix-hystrix-简例
- 下十页分页php,织梦二次开发实现栏目分页前十页后十页功能
- 使用docker搭建db2数据库
- DB9 串口母对母转接头是个坑
- 开源BT磁力搜索引擎收集
- OpenCv4在Win10 VS2019上环境搭建
- ai图片怎么把图中的字改掉_如何修改图片上的文字
- xmake中add_files的使用
- R:数据分析-----汽车数据可视化
- VR全景开发学习链接Three.js