【FINAL】单片式以太网控制芯片W7100A / W7100 Debugger指南(三)

博客
继续给大家介绍单片式以太网控制芯片——W7100A / W7100 的Debugger指南 最后一个部分。   第二部分可参考:W7100A / W7100 Debugger指南(二)   前两篇讲到驱动程序安装、连接Debugger、如何安装W7100A / W7100 Debugger及Debugger菜单,最后部分是搜索和变量窗口及存储器窗口的介绍,希望对大家有帮助!   同样,先来简单介绍下W7100和W7100A的基本特点。网络微处理器W7100提供一体成型嵌入式网络方案(内嵌8051单片机 + TCP/IP协议栈+ 10/100 高速以太网络MAC/PHY)。而W7100A(100Pin封装) 是 100 % 相容 W7100,W7100A 是W7100 的 升级版,增加了一些新功能,详细可登录官网查看。   ———————————————————————————————————————————   6.  搜索和变量窗口 W7100A / W7100 Debugger程序提供变量窗口可以查看本地变量、全局变量和寄存器的值。 6.1  搜索窗口(Search Window) 搜索窗口根据用户的登记来显示全局变量、本地变量或者存储器的值。全局/本地变量窗口也显示变量的值。但是通常用户如果想要查看一个或者两个变量的值并且有时会同时想要查看全局和本地变量的值时只需要在搜索窗口中登记这些值。   为了能够登记全局/本地变量,在搜索窗口的Name区域写下寄存器名称。 在搜索窗口,用户不仅可以确认变量的值同时可以进行修改。点击搜索窗口的值区域写入值就可以修改变量的值。 为了能够查看搜索窗口中存储器的值,以‘存储器类型:地址:大小’的格式写入。存储器的类型是C、D和X(代码存储器、内部数据存储器和外部数据存储器)。 Ex) 代码存储器 => C:0x1000:5 内部存储器 => D:0x30:2 外部存储器 => E:0x000300:4 用户可以通过点击鼠标右键在搜索、本地和全局窗口中选择显示格式,如二进制、十进制、八进制和十六进制。   6.2    本地变量窗口(Local Variable Window) 本地变量窗口显示在PC处的函数的本地变量值。 本地变量窗口与搜索窗口具有几乎相同的界面。但是,它不允许登记一个新的变量或者存储器地址。   6.3    全局变量窗口(Global Variable Window) 全局变量窗口显示工程中的所有全局变量。全局变量窗口具有和本地变量窗口相同的界面。   6.4   符号窗口(Symbol window) 符号窗口显示工程中的所有符号信息。它显示类(Class)类型和相关符号的地址。   6.5    寄存器窗口(Register window) 在寄存器窗口中,用户可以验证或者修改寄存器的值。寄存器窗口显示默认寄存器、 PSW和特殊函数寄存器(SFR)。点击寄存器值区域写入新的值就可以修改寄存器的值。如果寄存器是只读的,值将不会变化。   7.  存储器窗口(Memory window) 注意: 要读取iMCU7100EVB存储器的值,首先应该打开一个Keil工程或者HEX文件。   7.1  Idata存储器窗口(Idata Memory Window) Idata存储器窗口能够显示或者修改内部数据存储器的值(D:0x00 ~ D:0xFF)。 想要修改内部数据存储器的值,点击内部数据存储器的值区域并且写入新的值。所有的存储器窗口可以变成显示格式,例如2/4/8字节显示单元或者CHAR/INT/LONG显示格式。如图7.3所示。 如果内部数据存储器的值更新并且Debugger命令处于停止状态,它将内部数据存储器的值更新到iMCU7100API开发板。   7.2   外部数据存储器窗口(External Data Memory Window) 外部数据存储器窗口显示外部数据存储器的值(X:0x000000 ~ X:0xFFFFFF).   7.3    程序存储器窗口(Code Memory Window) 程序存储器窗口显示代码存储器的值(0xFF0000 ~ 0xFFFFFF)。该窗口只能可读,所以不能对它修改。   7.4   闪存窗口(Flash Memory Window) 7.4.1   程序存储器域(Code Memory Domain) 在闪存窗口中,如果没有选中’Data memory’选项,它将会显示程序存储器的值(0xFF0000 ~ 0xFFFFFF)。基本上它和‘程序存储器窗口’相同,但是它能够利用闪存写入按钮来修改值。 7.4.2   数据存储器域(Data Memory…
Read More

单片式以太网控制芯片W7100A / W7100 Debugger指南(二)

博客
今天继续给大家介绍单片式以太网控制芯片——W7100A / W7100 的Debugger指南 第二部分。 第一部分可参考:W7100A / W7100 Debugger指南(一) 上一篇讲到驱动程序安装、连接Debugger及如何安装W7100A / W7100 Debugger,今天继续的内容是Debugger菜单的介绍,希望对大家有帮助! 还是先来简单介绍下W7100和W7100A的基本特点。网络微处理器W7100提供一体成型嵌入式网络方案(内嵌8051单片机 + TCP/IP协议栈+ 10/100 高速以太网络MAC/PHY)。而W7100A(100Pin封装) 是 100 % 相容 W7100,W7100A 是W7100 的 升级版,增加了一些新功能,详细可登录官网查看。 5. Debugger 菜单 5.1 打开工程 W7100A / W7100 Debugger程序能够对KEIL工程文件以及HEX文件进行调试。首先运行W7100A/W7100 Debugger程序并且打开hex文件。   ❀打开工程 用Open Project命令来打开一个工程。 点击工具栏中的文件图标,也可以选择Project Menu=>Open或者利用快捷键Ctrl+0来完成。   如图5.2为文件打开浏览器。   如果用户打开的工程只包括一个HEX文件,Debugger将会提示警告信息,并且只显示‘汇编窗口(Assembly window)’界面。     *注意:当用户打开工程并且出现如下的错误信息时,用户必须删除工程目录下的 xxx.SRC文件,然后选定‘GenerateAssembler SRC File’和‘Assemble SRC File’选项来防止 W7100A/W7100 Debugger程序发生错误。   关于解决方法的其它详细信息,请参阅第4章’KEIL工程’。   ❀ 重新装载工程 用Reload命令来重新装载一个工程。当装载的工程发生变化时,点击重装工具栏按钮   进行再次装载。也可以选择’Project’=>’Reload’或者使用快捷键F4来完成。   ❀ 关闭工程 用Close命令来关闭一个工程。选择‘Project’ => ‘Close’或者快捷键Ctrl + Q来完成。   *注意:当使用W7100A/W7100 Debugger时,用户必须使用‘stop’命令来关闭 Debugger程序。   5.2   W7100A / W7100Debugger程序初始化   这一章主要介绍iMCU7100EVB Debugger程序的初始化过程。     ❀ Debugger程序和开发板复位 Debugger and board reset命令用来同时复位Debugger程序和开发板。已经进行设置的断点都会移动。 点击工具条上的按钮,或者选择’Tool menu’=>’Init Debugger and Board reset’菜单来复位Debugger程序和开发板。   ❀ 只复位开发板 Board reset命令只能用来复位开发板。如果已经设置了断点,它们仍然会被保留。点击工具条上的按钮或者选择’Debug menu’=>’Boardreset’来复位开发板。也可以使用快捷键F2。 ❀ 图像装载 Image load命令用来装载一个图像。 将用于debugging的HEX图像写入闪存。 点击按钮或者选择Debug菜单=> Image Load菜单来执行’图像装载’。也可以使用快捷键F3来完成。 如果图像写入并且确认成功,将会显示’Write OK’信息。   注意:如果开发板图像文件和当前的HEX文件不匹配,将会在执行例如‘Continue, Step, Next’等‘Debugger命令’时出现如下的错误信息。 ❀  调试 W7100A / W7100 Debugger程序提供‘Debug’和‘Tool’菜单以及工具栏按钮来进行调试。 ❀ 到源码(Source)行 Go to Source Line命令用来使光标移动到希望的源码行。可以选择’Tool’=>’Go…
Read More

单片式以太网控制芯片W7100A / W7100 Debugger指南(一)

博客
今天给大家介绍的是单片式以太网控制芯片——W7100A / W7100 的Debugger 指南。 先简单介绍下W7100和W7100A的基本特点。网络微处理器W7100提供一体成型嵌入式网络方案(内嵌8051单片机 + TCP/IP协议栈+ 10/100 高速以太网络MAC/PHY)。而W7100A(100Pin封装) 是 100 % 相容 W7100,W7100A 是W7100 的 升级版,增加了一些新功能,详细可登录官网查看。 1. 驱动程序安装 用USB线连接Debugger和PC机,然后将会出现‘新硬件搜索窗口(new hardware search window)’界面,如下图1.1所示。 选择‘自动安装软件(Automatically setupthe software (I))’后点击Next(N)按钮。 [图1.1] 新硬件搜索窗口 1 如果不是自动安装,选择‘从列表或者指定位置(高级)(Install from a list specific location(Advanced))’,并且如下进行驱动程序设置。 [图1.2] 新硬件搜索窗口 2 等待搜索Dubgger设备驱动程序。当设备驱动安装完成之后,点击END按钮结束。 [图1.3] 完成新硬件搜索 #2 2. 连接Debugger 这一章将会介绍如何连接Debugger与iMCU7100EVB以及iMCU7100EVB中的的DTAG。   这一章将会介绍如何连接Debugger与iMCU7100EVB以及iMCU7100EVB中的的DTAG。 用其它的DTAG线连接Debugger和iMCU7100EVB。红色的DTAG线必须连接到iMCU7100 DTAG socket 1号线,用USB线连接Debugger和PC机。完成后,将电源线插入iMCU7100EVB中,如图2.1按下EVB复位按钮,以及Debugger的复位按钮。最后确认LED5(启动LED)正常闪烁。 如果Debugger成功识别到W7100A/W7100单片机,LED5(启动LED)将会亮起,否则表示没有识别到W7100A/W7100单片机。如果没有正确识别,需要确认连接线是否连接正常或者重新复位iMCU7100EVB和Debugger。正常情况下,使用W7100A/W7100 Debugger之前LED5应该是打开的。 3. 安装W7100A / W7100Debugger 这一章将会介绍W7100A/W7100 Debugger的安装过程。首先,运行W7100A/W7100 Debugger程序安装文件。 iMCU7100EVB Debugger安装程序启动之后,点击Next按钮进行安装。   4.  KEIL工程 W7100A / W7100 Debugger支持的工程如下: l Keil uVision2工程 l Keil uVision3工程 l 只有hex文件 (受限的符号函数) ※W7100A / W7100 Debugger不支持包括KEIL uVision4以及之上版本的工程。但是如图 4.1,用户可以简单地将uVision4转换成uVision3工程继续使用W7100A/W7100Debugger程序。 ※W7100A / W7100A锁定功能警告 W7100A/W7100具有存储器锁定功能。如果设置锁定,用户便不能使用W7100A/W7100 Debugger程序,因为此时不能从W7100A/W7100存储器读取任何信息,所以用户必须利用WIZISP程序解除锁定才能正确使用W7100A/W7100 Debugger程序。如图4.2所示,清除复选框,并且点击“Lock”按钮。在解除锁定之后,整个存储器都会被擦除,用户需要再次写入固件。 更多关于WizISP程序的详细信息,请参考WizISP程序用户手册,可以到WIZnet官方网站进行下载。 W7100A / W7100 Debugger程序无法识别KEIL工程的多目录结构,因此所有的工程文件和源文件必须放置在同一个目录文件下。在KEIL工程中激活‘make hex file’选项和 ‘make symbol’选项。如果它们没有被激活,W7100A/W7100 Debugger就不能找到hex文件进行烧录。即使找到hex文件,也会出现错误信息。 首先,打开KEIL工程。 点击‘Project’ => ‘Options for ‘Target name’菜单。 从‘Output’栏下选定‘Create HEX File’选项,如图4.2。 选择‘Listing’栏并且选定‘C Compiler Listing’ 区的‘Symbols’选项。 同时选定‘Assembler Listing’区域中的‘Symbols’选项。‘AssemblerListing’选项任意。点击‘OK’按钮结束,开始编译KEIL工程。 在编译之后确认工程目录下是否生成HEX文件。   如果KEIL工程中包含像xxx.SRC文件这样的汇编代码,必须要选定‘Generate Assemble SRC File’和‘Assembler SRC File’选项。 首先,打开使用汇编代码的‘xxx.c’文件选项。 然后,选定‘Generate AssemblerSRC File’和‘Assemble SRC…
Read More

如何使用W3150A+芯片实现家庭网关系统软硬件设计

博客
随着计算机、通信、网络和控制技术的突飞猛进,人们不仅对家居的自动化和信息化程度要求越来越高,而且对家用设备控制的灵活性以及对外部信息获取的方便性也提出了更高的要求。这些要求的实现都离不开家庭网络,作为家庭网络结构中的门户和管理者,家庭网关的地位至关重要。它直接决定了家庭网络的设计所能达到的高度和服务水平。 今天给大家介绍一篇来自南京理工大学的硕士论文,迎合现时代智能家居等新兴应用市场的需求,撰写的这一篇家庭网络结构中家庭网关的软硬件设计,针对目前的现状,并结合相关技术,设计了基于ARM处理器的嵌入式家庭网关,硬件上以ARM微控制器LPC2378为核心,外扩了RS-232、RS-485、USB、PS/2等四个功能接口,双以太网接口以及红外,测温,g20等三个功能模块,并采用硬件TCP/IP协议栈芯片W3150A+实现TCP/IP。软件上设计了功能接口的驱动和各功能模块软件设计,实现了网络协议和短信息平台的设计。系统将GPRS通信引入家庭内部网络,实现了g20短信平台的设计。 本文在实验室环境下对系统各个子模块进行了分别测试以及整合测试。测试结果表明,该系统完成了预期的功能,并具有良好的可靠性和稳定性。(论文查看) 想了解更多有关TCP/IP协议栈芯片的信息,欢迎大家随时联系,谢谢关注! 更多产品信息请登录WIZnet官网:www.iwiznet.cn
Read More

W7100A单片机的MACRAW模式及简单的ARP应用

博客
这篇文档将会介绍如何使用W7100A中实现MACRAW。MACRAW是一个低于IP层的以太网MAC通信,它能够灵活使用目的主机的上层协议。W7100A是全硬件的TCP/IP协议栈芯片,它不仅包括OSI的4层,还包括4层之外的应用层。因此,W7100A能够简单且稳定地应用于嵌入式互联网中。   在第一章简单介绍下MACRAW模式,第二章介绍MACRAW SOCKET,第三章则是ARP(地址解析协议)。希望对大家有所帮助。     1. 简介 MACRAW是一个低于IP层的以太网MAC通信,它能够灵活使用目的主机的上层协议。图1显示了通过协议栈的数据封装形式。W7100A是全硬件的TCP/IP协议栈芯片,它不仅包括OSI的4层,还包括4层之外的应用层。因此,W7100A能够简单且稳定地应用于嵌入式互联网中。如果在链路层需要进行数据处理,可以使用MACRAW模式下的软件TCP/IP协议来完成。 MACRAW模式支持链路层的地址解析协议(ARP)。在W7100A中,ARP请求和回复都已经通过硬件逻辑进行了处理。尽管如此,它仍然可以在MACRAW模式下打开SOCKET0 (第0个  socket)(MACRAW模式下只能使用SOCKET0)。利用该SOCKET0,用户便能够处理软件TCP/IP协议栈指定的协议,例如ARP等。本文主要介绍W7100A单片机的MACRAW模式以及简单的 ARP应用。   <图1>通过协议栈的数据封装形式 2.  MACRAW SOCKET MACRAW模式下的通信只支持SOCKET0,但是此时SOCKET1~7也能同时工作于硬件 TCP/IP协议栈下。SOCKET0作为NIC(网络接口控制器)使用,这样便可实现软件TCP/IP协议栈。这就是W7100A单片机的混合TCP/IP协议栈:支持硬件TCP/IP和软件TCP/IP协议栈。对于普通的数据传输,软件TCP/IP能够通过MACRAW模式进行处理。MACRAW模式下的SOCKET0能够处理除了SOCKET1~7需要使用的协议之外的其它所有协议。由于MACRAW是处理纯以太网数据包的通信方法,这就要求工程师具备软件TCP/IP协议栈的知识背景。 图2显示了MACRAW的数据格式。MACRAW数据由两个字节的PACKET-INF0以及数据包组成。PACKET-INFO包含数据包的字节大小,而数据包又包括6字节的目的MAC地址、6字节的源MAC地址、2字节的类型(Type)以及46~1500字节的有效载荷(payload)。其中有效载荷 (payload)具有和ARP或者IP相似的互联网协议。具体的详细信息,请参考: http://www.iana.org/assignments/ethernet-numbers. <图2>MACRAW的数据格式 2.1  打开(OPEN) 将SOCKET号设置为‘0’之后,在MACRAW模式下通过调用socket()函数打开SOCKET,之后等待直到Sn_SR寄存器的值变成SOCK_MACRAW(0x42)。Sn_SR再次调用getSn_SR()函数来查看其状态。当Sn_SR的状态变成SOCK_MACRAW时,表示SOCKET打开(OPEN)过程完成。 /*设置协议号  */ s = 0; // 只可使用SOCKET0. /*打开MACRAW模式下的SOCKET0*/ socket(s,Sn_MR_MACRAW,port,mode); while(getSn_SR(s)  != SOCK_MACRAW); 例2.1打开(OPEN)Socket 2.2   发送(SEND) 通过sento()函数将data_buf发送到目的地址(add)。如果主机发送的数据长度小于60字节,在实际发送以太网数据包时会利用内部的“0填充”将数据填充到60字节。 /*向指定的目的端发送Ping请求*/ //max_size_tx_buf的值必须小于TX缓存器的最大存储空间 *  data_buf[max_size_tx_buf] = (uint8 *)0x7000;//设定数据缓存器的位置 sendto(s,(uint8  *)&data_buf,sizeof(data_buf),addr,port) 例2.2发送(SEND) 数据 2.3  接收(RECEIVE) 通过recvfrom()函数接收发送给目的地址(add)的data_buf。SOCKET仍然是在MACRAW模式下打开的,并且使用指定的端口。 /* 检测接收到的数据*/ //rlen表示RX缓存器中接收到的数据大小 //rlen的值必须小于RX缓存器的最大存储空间 if ( (rlen =  getSn_RX_RSR(s) ) > 0) /* 接收到的数据 */ //len包括PACKET-INFO以及DATA数据包的长度 len = (recvfrom(s, (uint8 *)data_buf,rlen,addr,&port); 例2.3接收(RECEIVE) 数据 2.4  关闭(CLOSE) 如果不再使用IPRAW SOCKETn,通过调用close()函数来关闭SOCKETn。 3.  ARP (地址解析协议)     ARP是查找存在于网络中的节点地址,同时将数据从源节点发送给目的节点的过程,发送的这些数据含有目标以太网的地址。目的节点接收到的信息可以使源节点唯一地识别请求的网络系统,进而提供需要的地址。当源节点接收到来自目的端的响应时,表示地址解析过程完成,该响应包含请求的地址。为了减少ARP请求的次数,以太网地址会保存在NIC中一段时间。需要注意的是,W7100A只能保存一个以太网地址,所以在每次建立连接时都需要ARP发送请求。表4显示了ARP信息格式。 Byte Byte Byte Byte Hardware (H) Type Protocol (P) Type H Length P Length Operation Sender H Address ( Octets 0-3 ) Sender H Address ( Octets 4-5 ) Sender IP ( Octets 0-1 ) Sender IP ( Octets 2-3 )…
Read More

芯片W3150A怎样应用于光纤以太网CCD相机系统设计

博客
这篇论文来自重庆光电技术研究所,刊载于《中文科技期刊数据库》。这里介绍的是光纤以太网相机系统的实现方案。以太网相机系统利用FPGA的NIOSⅡ内核对网卡芯片W3150A+进行配置及驱动,通过TCP/IP协议实现网络传输数据。下面是论文的一部分介绍。   摘要:光纤以太网络相机是目前最具前景的相机应用模式之一。设计了基于NIOSⅡ的光纤以太网相机系统,利用FPGA的NIOSⅡ内核对网卡芯片W3150A+进行配置及驱动,实现图像采集模块与计算机通过TCP/IP协议实现网络传输数据。该相机系统能在1s之内完成一幅2 MByte图像数据的网络传输,在速度上能满足系统的技术要求。文章介绍了系统的实现方案。(全文) 更多W3150A+產品資訊   相关文章请参考:1. Wiznet支持PPPoE协议的固件以太网芯片W5100     2. 谁需要SPI指南
Read More

如何用W7100A实现DNS客户端(二)【Final】

博客
这篇文档将会介绍DNS以及如何用iMCU7100EVB来实现DNS客户端,并且通过实际例子演示该功能。 在昨天的博文“如何用W7100A实现DNS客户端(一)”我们给大家介绍了第二章域名系统以及第三章DNS演示的部分,今天继续与大家分享第四章实现代码的内容。本文中所有的示例代码全部基于Keil编译环境。 这是本篇文档的最后一部分,希望对大家有所帮助。 第一部分请参考:如何用W7100A实现DNS客户端(一) 4      实现代码 本章将会介绍相关的示例代码,这些代码被下载到iMCU7100EVB开发板后,开发板利用UDP协议实现DNS客户端的功能。更多关于UDP协议的详细信息,请参考文档‘如何使用W7100A实现UDP通信’。 4.1    dns_query()函数 该DNS客户端的示例代码是用dns_query()函数完成的。其它的低级函数被dns_query()函数调用执行。代码4.1为dns_query()函数的代码。 所有的变量都定义于dns_query()函数内,结构变量dhdr位于dns.c的头文件中。DNS_IP保存DNS服务器的IP地址,必须正确输入。 首先,打开UDP socket。在代码4.2中,将端口号设置为5000(端口号可以根据用户的需求进行修改),然后利用dns_makequery()函数(后面将会详细介绍该函数)创建一个查询信息。在查询信息创建后,调用sento()函数将该信息作为一个UDP数据包发送到服务器。 在发送完查询信息后,iMCU7100EVB等待DNS服务器的响应。通过getSn_RX_RSR()函数来确认DNS服务器是否接收到响应信息;如果在一段时间后没有收到响应,就会认为是超时。一旦有响应,通过recvfrom()函数接收响应,并且调用parseMSG()函数来解析该响应信息。parseMSG()函数可以检测来自DNS服务器应答的rcode(DNS信息报文头段);并且返回1或者0。若返回值为1(rcode=0), 表示域名搜索成功。除了0之外的其它值都表示发生错误,但是在示例代码中,对于其它错误parseMSG()函数的返回值都将为0。 4.2    dns_makequery()函数 dns_makequery()函数由dns_query()函数调用来创建DNS查询信息。更多的详细信息,请参考第2章DNS查询信息的配置。该函数的返回值为DNS缓存器的信息指针。 查询信息是由dns_makequery()函数创建的,具体格式在第2章已经介绍。在缓存器中输入DNS信息时要用到Put16()函数,该函数将16位的输入保存到8位的缓存器中。 4.3    parseMSG()函数 parseMSG()由dns_query()函数调用,用来分析接收到的DNS信息。首先分析报文头段,然后调用dns_question()函数来分析问题段,之后再次调用dns_answer()函数分析应答段。最后将已经分析完成的应答信息、与域名相对应的IP地址保存到一个变量中通过printf()函数进行输出。 4.4        dns_question()函数 dns_question()函数由parseMSG()函数调用,用来分析问题段(如:Qname、Qtype、 Qclass)。更多的详细信息,请参考RFC1034和RFC1035文档中问题段的值。 4.5          dns_answer()函数 dns_answer()函数由parseMSG()函数调用,用来对资源记录(RRs)段(Name、Type、 Class、TTL、Rdlength、Rddata)进行分析。在对所有的信息类型解析完成之后,如果信息的类型为TypeA、TypePTR、TypeHINFO、TypeMX、TypeSOA或者TypeTXT时,需要对其进行再次解析。 更多的详细信息,请参考RFC1034和RFC1035文档中对各信息类型的介绍。 4.6         parse_name()函数 parse_name()函数只分析来自DNS应答信息的name段。parse_name()函数也可以改变DNS信息格式从而使用户更容易进行操作,在分析完成之后返回Name段的长度。 有关产品W7100A的更多应用博文,请参考下列文章: 如何用W7100A实现DNS客户端 如何用W7100A实现HTTP客户端(一)
Read More

如何用W7100A实现DNS客户端(一)

博客
这篇文档将会介绍DNS以及如何用iMCU7100EVB来实现DNS客户端,并且通过实际例子演示该功能。 在第二章我们简单地介绍一下域名系统,第三章是DNS演示的部分,第四章将涉及到代码的分析。本文中所有的示例代码全部基于Keil编译环境。 这里我们先分享前面部分,希望对大家有所帮助。 1      简介 这篇文档将会介绍DNS以及如何用iMCU7100EVB来实现DNS客户端,并且通过实际例子演示该功能。本文中所有的示例代码全部基于Keil编译环境。   2      域名系统(Domain Name System) 域名系统可以实现互联网域名(ex:www.wiznet.co.kr)和互联网IP地址(ex:202.131.29.70)之间的互相转换。DNS由DNS服务器组成,不同域名间的映射表被保存在服务器中;DNS解析程序(DNS客户端)能够查询并且接收来自DNS服务器的映射结果。DNS解析程序请求域名服务器把域名转换成对应的IP地址,域名服务器在接收到请求后开始搜索数据库。如果搜索到客户端请求的相关信息,映射的结果就会被发送到客户端。相反,如果没有搜索到相关信息,域名服务器就会查询根名服务器(root Name Server),等待查询结果并将结果发送到客户端。 下面的图2.2显示了DNS客户端和DNS服务器之间的通信方式。这些查询/应答的信息可以分成五段:报文头(Header)、问题(Question)、应答(Answer)、授权应答(Authority)、附加信息(Additional)。报文头段大小固定为12字节,而其它4段的长度不固定。应答、授权应答以及附加信息这三段可以看做一组,称为资源记录(Resource Records,简称RRs)。而每个报文头﹑问题和资源记录分别有自己的特殊格式。 想了解更多关于DNS的信息,请参阅RFC1034和RFC1035相关文档。 在本文中,iMCU7100EVB实现了DNS客户端的功能;它从DNS服务器上查询域名所对应的IP地址。该例程用UDP协议实现了与DNS服务器之间的发送/接收/分析应答通讯。 3     DNS演示 本章将会对iMCU7100EVB实现DNS客户端的过程进行演示。iMCU7100EVB可以利用UDP协议实现DNS客户端功能。要进行DNS演示,还需要用到超级终端机程序。 在进行演示之前,有一些重要的注意事项需要说明。必须根据用户的设置来设定相应的DNS程序中main.c文件的IP地址、网关IP地址、子网掩码等等信息。想了解更多关于这些值的信息,可以询问ISP(互联网服务提供商)或者是网络管理员。示例代码中的值都是随机设定的,如果不修改这些值,DNS代码可能无法正常工作。同时dns.c文件的DNS服务器的IP地址也需要根据用户的网络环境进行修改。通常DNS服务都是由ISP提供的,如果发生任何问题,请向ISP寻求解决方法。 开始进行演示时,将所有的电源线、网线以及串口线连接到iMCU7100EVB。关于开发板(EVB)的更多细节,可以参考‘iMCU7100EVB用户指南’。在正确修改DNS客户端和DNS服务器的IP地址后,编译附录中的源程序并生成HEX文件,然后利用串口线或者是调试器线将编译生成的HEX文件下载到iMCU7100EVB开发板。用户需要使用WizISP程序或者W7100A Debugger程序。详细信息请参考文档‘W7100A Debugger指南’和‘W7100A的WizISP程序用户指南’。这两个程序都在附带的CD内,也可以从WIZnet主页下载。 在成功下载HEX文件后,运行超级终端机程序。如果使用WizISP下载,需要关闭BOOTSEL 引脚,同时复位开发板。而如果使用W7100A Debugger,按下’run’按钮停止Debugger并且复位开发板。 在DNS演示中要用到超级终端机程序,原因是用户需要通过串口来输入要解析的域名。如图3.3所示,超级终端机的设置也需要根据用户的串行端口进行相应设定。尽管COM2口在图3.3中作为串行端口使用,但是它可以根据用户PC机上的实际设置进行更改。 同时,将波特率设置为115200,用户可以通过手动修改DNSC代码的串口设置来改变波特率。运行开发板和超级终端机程序,然后在超级终端机窗口中输入正确的域名。如图3.4所示,将会显示如下的结果。 当解析成功时,将会出现图3.4中的Part(a)中的结果,如果域名输入错误或者是DNS服务器解析失败,则出现Part(b)中的结果。除了这两种情况,如果在一段时间之后DNS服务器仍然没有响应,iMCU7100EVB将会提示超时信息。 这就是我们今天的内容,后续部分我们将在明天发布,谢谢关注。   有关产品W7100A的更多应用博文,请参考下列文章: 如何用W7100A实现DNS客户端 如何用W7100A实现HTTP客户端(一) 如何用W7100A实现DDNS客户端(一) 如何使用W7100A实现Telnet服务器(一)
Read More

如何使用W7100A实现Telnet服务器(三)

博客
在上两篇博文(如何使用W7100A实现Telnet服务器(一)、如何使用W7100A实现Telnet服务器(二))里我们简单地介绍一下Telnet,第三章将会演示Telnet函数的具体功能,第四章将涉及到代码的分析。这篇文档中所有的示例代码都是基于Keil uVision3。 第一篇在这里:http://blog.iwiznet.cn/?p=1193 第二篇在这里:http://blog.iwiznet.cn/?p=1196 下面我们介绍第三部分(主要内容是第四章的余下的代码分析部分): 4.3 tel_input()函数 tel_input()函数用来处理Telnet终端机内的输入命令。具体每一个命令以及处理方法请参考表3.1。 void tel_input(SOCKET s) { uint8 xdata c; while(1){ if((getSn_RX_RSR(s)) == 0)  break;     /*如果没有接收到的数据,断开*/ if(recv(s, &c, 1) == 0) break;     /*如果接收到的数据为0,断开*/ if(user_state == LOGOUT)  break;     /*如果用户的声明是LOGOUT, 断开*/ if(c != IAC){         /*如果接收到的数据不是控制字符*/ data_buf[buf_index++] = c;    /*保存接收到的数据到data_buf*/ putchar(c); if(user_state == LOGOUT)  break; if(user_state != PASSWORD){        sprintf(buf, "%c", c);        send(s, buf, strlen(buf)); } if(c == '\n'){     /*如果接收到一个\n’ ASCII 代码*/        if(buf_index > 1){          if(data_buf[buf_index-2] == '\r')  data_buf[buf_index-2] = '\0';          else  data_buf[buf_index-1] = '\0';          proc_command(s);      /* 处理接收到的数据*/          if(user_state == LOGIN) {            sprintf(buf, "W7100>");            send(s, buf, strlen(buf));          }        }        else{          sprintf(buf, "W7100>");          send(s, buf, strlen(buf));        }        buf_index = 0; } continue; } if(recv(s, &c,…
Read More