W3150A+评估板--EVB-PIC24 用户手册(二)
今天给大家继续介绍有关W3150A+评估板--EVBPIC24用户手册中关于 程序员指南的相关内容,供大家参考!3. 程序员指南3.1. 内存映射3.1.1. 代码 & 数据内存映射
EVB-PIC24的内存映射有128 K字节的程序存储和8K字节的SRAM. 外部空间(并行主端口)分为SRAM 区域和 W3150A+ 区域. 除了这些, 还有4K字节的 串行EEPROM. 各种环境变量记录在EEPROM上.
<图 3.1>, <表 3-1> 是EVB B/D的系统内存映射简介.
<图 3.1: EVB B/D 内存映射>
<表 3?1: 设备 MAP 定义>
3.2.1. 串行 EEPROM MAP<图 3.2>, <表 3.2> 示串行 EEPROM Map的图和表.
请参考 “evb/config.h” and “evb/config.c.”
<图 3.2: 串行 EEPROM Map>
<表 3?2: 串行 EEPROM MAP 定义>
3.1.2.1. 系统信息
系统信息区域用在诸如EVB B/D的固件版本的记录系统信息中.
<表 3?3: 系统信息>
系统信息以 SYSINFO 数据类型的方式被访问.
<表 3?4: SYSINFO 数据类型定义>
<表 3?5: 系统信息访问功能>
3.1.2.2. 网络信息
网络信息用与记录网络配置信息以便于被EVB B/D使用.
<表 3?6: 网络信息>
网络信息以 NETCONF 数据类型被访问.
<表 3?7: NETCONF 数据类型定义>
3.1.2.3. 信道信息
以下表格介绍了iinChip?的4个信道的应用.
<表 3?9: 信道信息>
信道信息用于记录iinChip?的 4 个信道的应用类型.
信道应用类型包含 回路 TCP服务器, 回路TCP 客户端,回路 UDP,DHCP客户端, 网络服务器,信道信息以APPTYPE枚举类型定义.
<表3?10: 信道应用类型>
信道信息以 CHCONF数据类型被访问.
<表 3?11: CHCONF 数据类型定义>
<表 3?12: 信道信息访问功能>
3.2. EVB B/D 固件
EVB B/D 固件 -EVB main()- 可分为两部分. 首先, 管理程序设置运行 EVB B/D的变量环境. 第二, 回路程序 测试 iinChip?性能,并且有用诸如DHCP, HTTP, DNS和 ICMP等因特网协议的因特网应用.
现在来看一下组成EVB B/D的源清单,然后看一下没一个应用源程序.
3.2.1. 源文件<表 3?13: EVB B/D 源文件>
3.2.2. 怎样编译
整理SRC 条款之后,以捆绑式编译Chapter 3.2.1 的源程序.
用 MPLAB IDE, 打开 “EVBs” 工程. 选择 “Make” 或“Build All”.
编译之后, 分配给Makefile TARGET和“Evbs.hex,”的名字和分配给FORMAT的文件已被创建. 这些能被装载到 PIC24.
<表 3?14 : iinChip?’s DEFINE 属性 >
因为 EVB B/D 是Little-Endian 系统, LITTLE_ENDIAN被定义积极使用. 如果目标系统是 Big-Endian, 被定义的项目应该注明.
如果 iinchip? 想用在不是 Direct Bus Mode的不同模式中, 用期望的 Bus Mode Define 成 __DEF_IINCHIP_BUS__ 而不是 __DEF_IINCHIP_DIRECT_MODE__. 如果iinchip? 的 DEFINE OPTION 有改变,那么源代码必须 Re-Build. 要 Re-Build 工程,先 “make clean”然后 “make”.
3.2.3. 怎么下载要下载十六进制文件, 用MPLAB IDE 和 MPLAB ICD 2.
1) 连接 ICD 线到PM-PIC24上的J1或扩展板上的J2.
2) 给 EVB B/D供电.
3) 运行 MPLAB IDE.
4) 在“Select Programmer”菜单条中方选择“MPLAB ICD 2”.
5) 点击“Program target device” 按钮
请参考MPLAB IDE的用户指南获得更多的信息.
3.2.4. EVB B/D的main()
仔细观察 main(), 一段时间后, 等待板子复位后初始化后的来自串口终端的管理程序.此时, 如果串口终端显示管理程序进入命令模式,,可以设置诸如网络信息和信道信息的EVB B/D环境,并可以运行ping 请求程序.
如果管理程序完成或没有从串口终端来的命令, 则执行iinChip?的4个信道中的每一个应用并用原来设置的网络信息初始化.
<图 3.3> EVB B/D main()的进程. 请参考 “main/main.c”
如果 DHCP 客户端 存在于应用中, DHCP客户端通过调用‘get_IP_DHCPS()’函数从DHCP服务器得到网络信息. 如果不存在DHCP服务器应用或从DHCP服务器得到网络信息失败,EVB B/D将用原来设置的网络信息初始化.
初始化之后, 通过调用每一个寄存器应用操作来运行EVB B/D测试应用. 想知道DHCP服务器应用的更多详细信息, 请参考 “Chapter 3.2.6.5 DHCP Client.”
<表 3?15: EVB B/D的 main()的参函数>
<图 3.3: EVB B/D的 main()>
3.2.5. 管理程序管理程序通过串口终端和用请求到某一目的地的测试应用设置网络和信道信息.
通过从 main() 函数调用check_manage()可以开始运行管理程序. check_manage() 检查是否有从串口终端键入到管理程序的命令, 是否有字符‘M’ 或 ‘m’ 输入与否. 如果有命令,将会通过 manage_config()进入管理程序. 如果用户改变了配置, EVB B/D会自动重启并跳过check_manage().
<图 3.4: check_manage()>
如果EVB B/D 有更新, EVB B/D 会自动重启以应用更新的配置.
<表 3?16: 管理程序的调用函数 >
3.2.5.1. 网络配置
网络配置 是管理程序的子程序,并和manage_network()一起建立. 它设置EVB B/D的网络信息. 一般情况下, 网络信息中的MAC地址在初始化设置之后几乎不更新. 相应地, MAC 地址设置不提供诸如源IP,网关IP或子网掩码等的配置菜单,但是它有隐藏菜单. 同样, MAC 地址在出厂复位时并不改变. MAC 用‘M’ 或 ‘m’进行更行.
3.2.5.2. 信道配置信道配置, 由 manage_config() 构成的管理程序的一个子程序,决定iinChip?的4个信道用哪个应用.
能设置应用类型, 有DHCP 客户端,回路TCP 服务器/客户端, 回路UDP, 和网络服务器程序. 每一个信道可以设置成以上的一个类型. 但是DHCP客户端只能被第一个信道支持且设置不能应用于其他信道.
TCP 服务器程序 (LB_TCPS,WEB_SERVER) 能被信道重复设置且能用相同的端口号. 这里, 客户端的端口号需与服务器端口号相同. 其他应用能被信道重复设置,但是不能使用相同的端口号.
3.2.5.3. Ping 请求程序
Ping 请求程序发送 Ping 请求到某一目的地.它在IP层上用ICMP 协议信息,并由 ping_request()组成.
ping_request()在DOS提示符中用相似与Ping程序的格式创建. 它在分析和处理选项后发送Ping请求到目的地.
域名和IP地址都能被用于Ping请求的目的地址. 在使用域名的情况下, 域名将被用gethostbyname() 或 DNS转变为IP地址. 有了被改变的IP地址, Ping请求可被发送.
当IP 地址和 ‘-a’ 选项一起用时, 域名可以通过gethostbyaddr()从DNS服务器得到,并且Ping请求发送到该 IP 地址. 当IP 地址不和‘-a’ 选项一起用时, Ping 请求不用连接到DNS就可以发送到输入IP地址.
gethostbyname(), gethostbyaddr() is DNS-related函数. 要了解更多信息, 请参考 Chapter 3.2.6.6 DNS Client.
在进入Ping程序之前现在简单看一下Ping消息.
Ping 消息在ICMP消息的类型区域取值 ‘0’(Ping回复) 或 ‘8’(Ping 请求) ,在代码区域取值0. 同样, ICMP消息的类型 Dependant数据区(4字节) 能被重定义为 ID 区(2字节), 序列号区(2字节) 同样地. ICMP消息的数据区 填满了Ping数据以进行回路测试.
最后, 计算出 ICMP头和Ping数据(它们的校验和区是0)的校验和. 计算之后, 用新的计算值代替0 校验和区.
<图 3.10> 是ICMP 消息格式和Ping消息之间关系的一个代表图.
检查关于Ping请求的Ping回复可通过检查ID、序列号和ping数据区的值是否一样来实现. 如果在等待时间中 Ping 回复还没有来到, ping请求可以再次发送. 在这种情况下,Ping 请求的序列号递增1.
Ping请求消息传送和检查Ping回复消息通过ping()实现. ping()的元素是目的IP地址, Ping回复等待时间, Ping请求号和 Ping 数据大小,接收到的Ping回复通过分析和处理以和这些元素相同.
<图 3.11> 是 ping()的进程, Ping 消息以 <表 3-20>示的数据类型被定义和使用. 请参考 “inet/ping.h”
<表 3?20: PINGMSG 数据类型定义>
PINGMSG的数据区大小是 ‘PINGBUF_LEN’ 字节. PINGBUF_LEN被定义成 ‘32’.但是数据区最大大小可以是‘1472’. 这是因为iinChip?的发送MTU是1480 字节,Code, CheckSum, ID和 SeqNum Field Size 之和是8 字节. 从1480 减去8,就得到1472. 因此,大小是1472字节.
ping() 的结果保存在数据类型定义中,见<表3-21>.
<表 3?21: PINGLOG 数据类型定义>
可以通过DisplayPingStatistics()功能将保存的Ping日志通过RS232串口终端打印出来。
CheckSumErr 字段,每当ping校验从对方接受到错误信息会自动加1.
UnreachableMSG 字段和 TimeExceedMSG 字段,如果从对方或网关接收到不可达信息或超时信息会自动增加1.
UnknownMSG 字段,当接受到位置信息会自动加1
ARPErr field 字段,每当ARP 响应对方在收到ARP请求后,没有获取到对方的硬件地址(MAC地址),会自动加1.
ping() 每发送一次 Ping请求,Ping请求区就递增1.
每当收到来自对等端口的响应Ping请求的Ping回复,Ping回复区就递增1.
每当因为在发送Ping请求后在一定时间内没有收到回复而发生超时,损耗区递增1.
Ping请求程序, 像以前解释的一样, 使用运行在IP层上的 ICMP协议.在 iinChip?上使用ICMP信道的情况下, 见 <图 3.11> and <图 3.13>, 必须决定IP协议.在调用setSn_PROTO(s, IPPROT_ICMP)后必须建立socket.当建立socket时,通过调用socket() 函数创建IP RAW Channel. 在关闭 ICMP Socket时,在 close(s) 和清除原来设置的ICMP标志后需调用setSn_PROTO(s, 0x00).
<表 3?22: ping_request()中的参考函数>
感谢关注!
相关内容可以参考WIZnet中文博客:
W3150A+评估板--EVB-PIC24 用户手册(一)