收藏 分享(赏)

Nios II下网络设备LAN91C111加载机制分析.doc

上传人:dreamzhangning 文档编号:2227687 上传时间:2018-09-06 格式:DOC 页数:5 大小:124.50KB
下载 相关 举报
Nios II下网络设备LAN91C111加载机制分析.doc_第1页
第1页 / 共5页
Nios II下网络设备LAN91C111加载机制分析.doc_第2页
第2页 / 共5页
Nios II下网络设备LAN91C111加载机制分析.doc_第3页
第3页 / 共5页
Nios II下网络设备LAN91C111加载机制分析.doc_第4页
第4页 / 共5页
Nios II下网络设备LAN91C111加载机制分析.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、1Nios II 下网络设备 LAN91C111 加载机制分析乔从连(船舶重工集团公司 723 所,扬州 225001)摘要:本文主要针对 lan91c111 在 Nios II 平台下的网络通讯应用,结合 HAL 系统库、lwIp 协议,详细分析了 Nios II 平台下网络设备的加载机制。关键词: SOPC;Nios II;lan91c111;lwIpthe Loading Mechanism Analysis of Lan91c111 based on Nios IIQIAO Cong-lian(The 723 Institute of CSIC,Yangzhou 225001,Chin

2、a)Abstract: This paper mostly aimed at the net communication of lan91c111 in the Nios II ,combined the HAL system library and the lwIp protocol, particularly analysed the loading mechanism of lan91c111 based on Nios II.Keyword: SOPC;Nios II;lan91c111;lwIp0 引言在 Nios II 平台上开发网络通讯时,对网络设备 lan91c111 的支持的

3、需求,需要理解该网络芯片如何在 Nios II 系统平台中如何一步步加载成功,直至可以进行用户要求的 TCP 或 UDP 通讯开发。Altera 所推出的 Nios II 平台中,其 HAL 系统库可以支持开放式硬件驱动开发;为了支持网络通讯开发而将裁剪版的 TCP/IP 协议 lwIP 移植进来。完整的 lan91c111 的逻辑控制接口及驱动已被 Nios II 平台支持。以下将先简单介绍 Nios II 平台、lan91c111 网络芯片、 HAL 系统库、lwIP,然后详细分析 Nios II 平台下lan91c111 网络设备的加载机制。1 Nios II 平台介绍、 LAN91C1

4、11 网络芯片传统的集成电路设计技术是将 IC 芯片通过印刷电路板(PCB)等技术实现整机系统的。尽管 IC 的速度可以很高,功耗可以很小,但由于 PCB 板中 IC 芯片之间的连线延时、PCB 板可靠性及重量等因素的限制,整机系统的性能受到了很大的限制。SOPC(System on a Programmable Chip)是 Altera 公司提出来的一种灵活高效的片上系统解决方案。它将处理器、存储器、I/O 口、LVDS、CDR 等系统设计需要的功能模块集成到一个 PLD 器件上,构建成一个可编程的片上系统。Nios II 是 Altera 公司为了支持可编程 SOPC 系统而推出的软核处

5、理器,可放入 FPGA 中,它只占芯片内部很少的一部分逻辑单元,成本很低。所以我们也可以将 Nios II 处理器理解为可在可编程逻辑器件内实现的 CPU。Nios II 平台支持网络通讯功能,通过对外围网络芯片设备的支持来完成;目前已提供了完整的对LAN91C111 芯片的逻辑接口支持。LAN91C111 是 SMSC 公司为嵌入式应用系统推出的第三代快速以太网控制器,集成了遵循 SMSC/CD 协议的MAC(媒体层)和 PHY(物理层),符合 IEEE802.3/802.U-100Base-Tx/10Base-T 规范,主要功能如下:自适应的传输速率,支持 100M/10Mbps支持突发数

6、据的传输.8kb 的内部存储器件用于接收和发送的缓存支持 8 位,16 位,32 位的数据传输方式提前发送和接收功能.2 HAL 系统库简单介绍 HAL系统库是一个轻量级的运行环境,它为应用程序与底层硬件设备提供了一个简单的设备驱动程序接口;2HAL的API与标准C库结合在一起,HAL API可以允许用户使用熟悉的C库函数比如printf()、fopen()和fwrite()等来访问设备和文件。HAL作为Nios II处理器系统的板级支持包,为你的嵌入式系统提供了一个统一的外设接口。通过对SOPC Builder和NIOS II IDE的紧密结合使用,用户可以轻松得到一个HAL系统。首先由SO

7、PC Builder产生一个硬件系统,然后Nios II IDE能够根据你之前建立的硬件系统来定制相匹配的HAL系统库;此外,硬件配置上的改变可以自动反映到HAL设备驱动配置上,从而可以消除由底层硬件的细微变化产生的bug。HAL 设备驱动为应用程序与设备驱动软件提供了一个清除的区别。HAL 设备驱动的存在使得用户可以不用去关心底层硬件的变化而重复调用应用程序代码。另外也很容易在已有的 HAL 设备驱动库下对新增加的硬件外设编写与现有外设驱动兼容的设备驱动程序。HAL 结构图如图 1 所示:U s e r P r o g r a mC S t a n d a r d L i b r a r y

8、H A L A P ID e v i c eD r i v e rD e v i c eD r i v e r. . .D e v i c eD r i v e rN i o s I I P r o c e s s o r S y s t e m H a r d w a r e 图 1 HAL 结构图3 LWIP 简单介绍lwIP 是一套小型化的 TCP/IP 传输控制协议,它可以在提供完整的 TCP/IP 功能的同时减少系统资源的使用。lwIP 就是专为存储器容量较小的嵌入式系统设计,自然也就适用于 Nios II 处理器系统。lwIP 包括以下功能: 可以捆绑多个网络接口的 IP 协议 用

9、于网络维护和调试的 ICMP 协议 用户数据报协议 UDP 具有堵塞控制的 TCP 协议,RTT 预测、快速的恢复及重新传输 DHCP 协议 以太网的地址解析 ARP 协议 最后提供给用户程序接口的标准 socket 接口4 LAN91C111 在 Nios II 平台上的设备加载过程详细分析以下所涉及到的程序文件名、存放位置、内容等均为在 Nios II5.1 环境下。主要的文件内容目录介绍:alt_lwip_dev.c:nios2_51componentsaltera_lwipUCOSIIsrc 需加载 LWIP 的网络设备初始化文件;system.h:softwaresimple_soc

10、ket_server_0_syslibDebugsystem_description 位于用户工程目录中,主要由计算机动态产生,描述了根据用户系统设置生成的系统资源配置内容,用户不用修改;alt_sys_init.c :softwaresimple_socket_server_0_syslibDebugsystem_description位于用户工程目录中,HAL 系统库初始化程序文件,用户不用修改;altera_avalon_lan91c111.c: nios2_51componentsaltera_avalon_lan91c111UCOSIIsrclan91c111 网络设备驱动程序文件;

11、3系统网络设备的加载机制,流程如图 2 所示: 根 据 分 配 好 的 资 源数 据 初 始 化 网 络 设备 环 境为 网 络 设 备 分 配系 统 资 源 网 络 设 备 协 议 栈及 接 口 电 路 初 始 化图 2 网络设备加载主流程图1) 加载第一步:为网络设备 lan91c111 分配系统资源 首先在 lwip 初始化文件 alt_lwip_dev.c 中定义了 lwip 设备链表:“ALT_LLIST_HEAD(alt_lwip_device_list);” 这里的宏 ALT_LLIST_HEAD 定义在 alt_llist.h 文件中:“typedef struct alt_l

12、list_s alt_llist;struct alt_llist_s alt_llist* next; /* Pointer to the next element in the list. */alt_llist* previous; /* Pointer to the previous element in the list. */;#define ALT_LLIST_HEAD(head) alt_llist head = ”这里 ALTERA_AVALON_LAN91C111_INSTANCE 宏定义在 altera_avalon_lan91c111.h 文件中函数“alt_avalo

13、n_lan91c111_init、alt_avalon_lan91c111_rx”,分别为设备初始化函数和负责接收网络数据的函数,具体定义在后面的网络设备驱动程序 altera_avalon_lan91c111.c 里。资源定义:IRQ、BASE、BUS_WIDTH 等的值在用户工程文件 system.h 中定义:“#define LAN91C111_BASE 0x01010000#define LAN91C111_IRQ 0#define LAN91C111_LAN91C111_DATA_BUS_WIDTH 32 ”2) 加载第二步:为 lan91c111 分配好系统资源后,开始初始化网络设

14、备环境在完成定义设备链表及分配系统资源后,开始设备环境初始化,动态的组织这些资源数据。初始化程序文件 alt_sys_init.c 中的唯一一个函数 alt_sys_init()就是用来执行初始化所有外设环境的:“void alt_sys_init( void )ALTERA_AVALON_LAN91C111_INIT( LAN91C111, lan91c111 );”其中用来初始化 lan91c111 的宏 ALTERA_AVALON_SYSID_INIT( SYSID, sysid )定义在网络设备驱动程序头文件 altera_avalon_lan91c111.h 中,其主要的动作是执行函

15、数 alt_lwip_dev_reg(dev)。而函数 alt_lwip_dev_reg(dev)的定义在文件 alt_lwip_dev.h 中,内容为:“#define alt_lwip_dev_reg(dev) alt_llist_insert(”函数的主要内容:“sys_init();stats_init();mem_init();memp_init();pbuf_init();netif_init();tcpip_init(thread_prio, initfunc, arg);”最后一个初始化函数 tcpip_init(thread_prio, initfunc, arg),启动 T

16、CP/IP 初始化任务,任务的优先级 thread_prio 在用户工程定义头文件 simple_socket_server.h 中定义:“#define LWIP_TCPIP_TASK_PRIORITY 6”在启动好该任务后,调用回调函数 initfunc,实际的回调函数定义 init_done_func 还是在 lwip_init.c文件中定义,主要就是执行下一步动作:执行 lwip_devices_init 函数初始化网络芯片接口电路。 第二步:网络芯片接口电路初始化 lwip_devices_init 函数定义在 alt_lwip_dev.c 文件中,可用图 4 所示的初始化流程图来表

17、示:首 先 判 断 网 络设 备 的 硬 件 存在 与 否 新 建 网 络 数 据包 接 收 线 程lwip_devrx 根 据 之 前 分 配 好 的网 络 设 备 资 源执 行 分 配 函 数 netif_ad执 行 网 络 芯 片 接 口初 始 化 函 数alt_valon_la91c_int执 行 用 户 工 程 中定 义 的 函 数get_ipadr接 口 电 路 初 始化 工 作 完 成图 4 网络芯片接口电路初始化流程5初始化函数实际调用:“lwip_devices_init(LWIP_RX_ETHER_TASK_PRIORITY)”系统首先判断用户硬件中网络芯片是否存在,至少需

18、有一个网络芯片;然后新建一个线程负责底层数据包的接收,响应中断:“rx_thread = sys_thread_new(lwip_dev_rx, ”其中的线程优先级 rx_thread_prio 的实际参数即 LWIP_RX_ETHER_TASK_PRIORITY,其数值定义在用户工程头文件 simple_socket_server.h 中定义:“#define LWIP_RX_ETHER_TASK_PRIORITY 3”接下来在执行分配函数 netif_add 时,其内容:“netif_add(dev_list_ptr-if,”其中 dev_list_ptr-dev.init_routine

19、 执行的就是直接去驱动 lan91c111 的函数:“alt_Avalon_lan91c111_init(struct netif *netif) ”该函数的核心内容就是执行 low_level_init 函数,进行驱动层级别电路的一系列初始化工作:get_mac_addr 从片外 flash 里读取 MAC 地址,函数定义由用户提供reset_device 复位设备电路set_mac_address 设置之前读出的 MAC 地址configure_phy 配置网络设备接口设置一些网络设备的寄存器开关等;在 alt_Avalon_lan91c111_init 成功执行后,回到 lwip_dev

20、ices_init 函数中,开始进行应用层的 IP 配置,比如 DHCP 的设置、静态 IP 地址的设置等。至此,网络设备的全部加载步骤完成,最后意味着 lan91c111 网络芯片已成功加载到 Nios II 系统中,用户可以开始进行应用层的网络通讯具体开发应用:比如 TCP 通讯和 UDP 通讯等。5 结束语 本文虽然是针对 lan91c111 分析了网络设备加载机制, ,但 Nios II 平台对用户外设的支持大致都是这样的机制,也就是说除了网络设备,用户要用到的其它外设在系统中的成功加载也可参照该流程。因此结合 HAL 系统库的程序内容,我们也可以开发 Nios II 平台目前还未提供的外设的驱动程序及加载程序。这就类似于其它平台的 BSP 设备模板开发工作。【参考文献】【1】 周博 等编著 挑战 SOC基于 NIOS 的 SOPC 设计与实践 :清华大学出版社 2004.7【2】 李兰英 等编著 Nios II 嵌入式软核SOPC 设计原理及应用:北京航空航天大学出版社 2006.11

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报