打印
[资料分享与下载]

K60和K64的ENET模块的差异

[复制链接]
2172|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近,在 帮一个客户把他购买的Segger公司的embOS从K60移植到K64上。就在移植的过程中,发现在K60上能正常工作的ENET驱动程序到K64上却不能工作。然而,FSL官方的驱动程序(KSDK1.1)既能在K60上运行,也能在K64上运行,我们也没有看到专门的文档说明K60和K64的同种外设模块之间的差异。那么,究竟是什么原因导致embOS的ENET驱动程序在K64上不能正常运行呢?
经过对程序进行跟踪调试,并且反复比较embOS的驱动程序和FSL官方的驱动程序,以及逐字逐句地研究数据手册,终于发现:原来K64的ENET模块并非完全照搬K60的,而是缩减了一些功能,具体的有两点差异,说明如下:
1.        K60的ENET模块既支持小端模式(little endian),也支持大端模式(big endian),它可以通过寄存器ENET_ECR中的DBSWP位来进行设置;
        而K64的只能支持小端模式,虽然它的寄存器ENET_ECR中也有DBSWP位,但是这一位必须设置为“1”,手册上原文如下:
        另外,在K64的ENET模块介绍中,也多次这样提示只支持小端模式。
问题小结:FSL的官方驱动程序设置的是小端模式,所以在K60和K64上都能正常运行;而embOS的驱动程序设置的是大端模式(大概是为了跟K60的早期版本兼容吧,因为早期版本没有DBSWP位,只能支持大端模式),所以在K64上就不能工作了。

2.         K60的发送数据缓冲区的起始地址虽然在手册上写的是必须按8字节对齐(原文如下),但是实际调试时发现不对齐也能工作;而K64的却是“说到做到”了,不对齐就不干活了。(从以下两者描述中,也能看到大小端模式的不同)
         K60发送缓冲区的起始地址描述
        K64发送缓冲区的起始地址描述
问题小结:embOS的驱动程序(准确地说应该是IP协议栈,因为发送数据缓冲区的指针是从上层传递给ENET驱动程序的)在设计的时候可能忽略了这个要求,所以它虽然在K60上能正常工作,但是一到“较真”的K64上就不行了。

by Zhiqiang Fu(b17589@freescale.com)---IMM FAE China
K60和K64的ENET模块的差异.pdf (405.45 KB)

相关帖子

沙发
quray1985| | 2015-2-28 16:57 | 只看该作者
谢谢楼主的分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

18

帖子

0

粉丝