PICNIC

关于PICNIC

■关于PICNIC

1. PICNIC的概要

2. PICNIC的固件

3. PICNIC的使用方法

4. PICNIC的专用控制协议

 

→提问 讨论用的BBS

←返回目录

2006年4月5日 16:39 更新

 

●PICNIC的概要

所谓PICNIC特征•回路图动作确认时的必需物PICNIC手册


1.1.1 所谓PICNIC

PICNIC是"PIC Network Interface Card" 的缩写,使用了 Microchip PIC16F877单片机可以连接以太网的I/O功能板。比起以前的ver.1这次使用的ver.2组件更加小型化,仅有700mm X 100mm (图片1)。

→Microchip PIC系列的链接集从这儿开始

<图片1> 对应网络的PIC单片机板PICNIC ver.2

 

PICNIC是TriState公司的产品,可以从秋月电子通商购买

→TriState公司的连接从这儿进入

→秋月电子通商的连接集从这儿进入

如果事先准备好这个组件连接周边机器用的接口,以及经由网络控制PIC单片机的并行输入输出的应用程序,就可以简单实现机器电源的控制及传感器信息的收集等各种各样的系统。

利用安装在PIC单片机上的固件中的简易http服务器,来实现经由网络对并行输入输出的控制•监视。这么一来客户端(web浏览器)的程序就不需编写,同时也不选择机种及OS。

另外因为PICNIC的网络接口控制(NIC)利用以太网。所以只需准备市场上贩卖的便宜的以太网用的网络设备(HUB等)和网线,就可以构筑所有的实验环境。不过如果要连接到外部网络(如WAN,互联网),则需要连接到局域网或ADSL或CATV互联网等。

另外,如果把PICNIC专用的控制协议(protocol)安装在客户端,就能够构筑不通过web浏览器的专用系统。有关控制用程序库可以从TriState公司的主页下载


1.1.2 特征•回路图

使用了Microchip公司制的 PIC16F877(RISC Enhanced x16、DIP300/40pin CMOS Flash 8bit微型控制器,统称87x系列)。数据表(原版)从这儿进入

使用了Realtek Semiconductor公司制的 NE2000(DP8390)兼容RTL-8019AS(10BASE-T 100pin/QFP one-chip Ethernet控制器,俗称蟹形芯片

主要的LSI,芯片电阻,电容已经预先焊接在线路板上。因此组装时只要安装接插件类,DIP-IC插座,输入输出接插件,LED等就可以完成,非常简单。

<图1> 功能块图

<图2> 回路图(转载自TriState公司的数据表)
点击这儿可以显示PDF文件

※附录

PIC16F877控制器是把RA端口作为功能板的模拟输入管脚,而把RB端口作为功能板的通用(数字)输入输出管脚。输入输出端口是回路图中的CN2接插件(100mil高26管脚)

・模拟输入管脚RA5连接着被安装在线路板上的摄氏线形温度传感器IC(LM35DZ)的输出(温度系数+10.0mV/℃)。由此可以监视功能板周围的温度(大概的室温)

・把LCD液晶显示面板模块(可选项)连接到CN5时,因为数字输出与CN2间共用部分RB端口,因此外部可以利用的端口数就减少了。

串行EEPROM93C46 (U2)是用来记录此PICNIC的以太网控制器的独一无二的MAC地址

・线路板上的跳线开关JP2用来选择在投入电源时,固件是执行「通常模式」,还是执行「引导模式(初期设定模式)」。


1.1.3 动作确认时的必需物

・(电源适配器等)DC12V电源(推荐使用秋月电子的DC12V电源适配器

・需要有10BASE-T网卡的电脑(在引导模式下的确认需要由RS-232C串行接口连接)(图片2)

Ethernet 网络集线器(HUB)装置与直连网线(2根)

・仅1对1连接的时候,用交叉网线

・WEB浏览器

・开发固件的时候,需要MPLAB(MPASM)开发环境和PIC烧写器

・开发客户端程序的时候,需要Visual BASIC,Visual C++,GNU gcc等程序开发环境。

<图片2> 与电脑连接进行动作确认时的情形

如果正常动作,则用浏览器访问时出现这样的网页


1.1.4 PICNIC手册

・通信方式:Ethernet 10BASE-T

・访问方式:CSMA/CD

・Ethernet NIC:RTL-8019AS(兼容NE2000)

・控制CPU:PIC16F877-20/P(20MHz时钟频率)

・内藏接口:
 (a)数字I/O:输出4ch,输入4ch(使用LCD模块时,输出6ch,输入2ch)
 (b)模拟I/O:输入4ch(0-5V、分辨率10bit)+温度传感器用1ch(测定范围 0-100℃)
 (c)串行I/O:1ch(RS-232C,无流控制)

・固件内藏协议:ARP、DHCP、ICMP、IP、UDP、TCP、HTTP(仅限GET方法)
・IP最大同步连接数:5

・通信缓冲区:16K字节(Ethernet内部的环形缓冲区)

・默认IP地址:192.168.0.200/24

・周边功能:RS-232C串行接口(SP232ACP),温度传感器(LM35DZ),16X2 LCD显示模块(SC1602B,可选项)

・LED显示:I/O端口状态x4ch,Ethernet-NIC状态LEDx3(TX,RX,LINK)

・电源:DC 8-12V 100mA

●PICNIC的固件

固件内藏协议堆栈固件的下载固件的概要固件的初期设定顺序


1.2.1 固件内藏协议堆栈

在本PICNIC的固件里实际配置的协议堆栈有如下

・Ethernet帧收送信处理
・ARP收信处理
・IP收信处理
・ICMP收信处理
・UDP收信处理
・TCP收信处理
・HTTP收信处理


1.2.2 固件的下载

请从下面的地址下载PICNIC ver.2用的对应MPASM汇编编译器的固件(ver1.2)

汇编源程序文件(v12.asm)

编译后的HEX文件(v12.hex)


1.2.3 固件的概要

固件全部有7380行编码。其大概地构成如下:

21~37行:各种常量的定义
42~53行:工作内存区域
61~466行:面向协议栈的各种环境变量的定义

470行:程序开始处(ORG 0)
482~621行:中断例行程序(收信处理、超时)
628~815行:各种功能函数(TCP帧编号的管理、错误恢复)

820~889行:主循环

902~1018行:以太帧(frame)接收处理(RTL8019AS缓冲区的管理)
1025~1068行:ARP协议处理
1172~1341行:IP协议处理(收信缓冲区的管理)
1349~1434行:ICMP协议处理
1441~1565行:UDP协议处理(并行端口的输出管理)
1571~1682行:DHCP(BOOTP)协议处理(IP地址的获得)
1690~2323行:TCP协议处理(仅含服务器功能,含有包(packet)输出例行程序)

2328~2393行:A/D变换的输入处理
2398~2500行:输入输出状态的前处理例行程序
2504~2558行:短信息的解析处理
2563~2764行:套接字(socket)的制作、检验和(check sum)的计算

2771~3032行:有关RTL8019AS的初始化
3037~3214行:检验和的计算、包送信的处理(NIC水准)
3221~3344行:以太帧、IP帧的作成

3352~3578行:UDP→并行I/O的控制、A/D变换功能
3584~3560行:UDP校验和的计算
3655~3873行:串行接口的控制

3879~4024行:套接字的管理
4030~4290行:以太网广播(broad cast)的送信处理

4295~4369行:有关EEPROM的数据写入
4555~4577行:EEPROM的初始化
6063~6130行:有关EEPROM的程序库
7266~7306行:设定EEPROM的默认值

4379~4548行:URL指定的CGI的解析处理
4583~4643行:根据URL参数变更并行I/O的输出值

4651~4919行:启动例行程序(有关投入电源时的设定)
4625~5036行:有关LCD显示的程序库
5042~5292行:各种运算函数的程序库

5297~5404行:引导模式・初始化例行程序
5411~5944行:有关串联终端间的操作指令的处理
7015~7054行:引导模式・终端的显示
7311~7374行:引导模式・指令解析

5952~6056行:当前的套接字状态的通知处理(现在未使用)

6139~6266行:在LCD面板上显示获得的IP地址的处理
6431~6697行:从DHCP服务器获得IP地址的处理

6273~6424行:串行端口→UDP送信处理
6703~7009行:UDP收信→串行端口的输出、LCD面板的显示

7061~7258行:存储Web浏览器HTML格式的应答信息・格式的区域


在这之中的已经安装好的各种协议栈,用户几乎不需修改。有关在web浏览器显示的控制用网页的修改,从7061行开始,需要修改的是存储HTML格式的应答信息及格式的部分。

由于以太帧长度的限制,无法一次传送全部的HTML格式的文本,故把它分割成了4块(从ESTAB0到ESTAB9共4次)送出。这些传送的处理由从1690行开始的TCP包处理序列来实现。

为了在以太网线断线,互联网不通,或各种协议的处理中陷入冻结状态时能够恢复,在时钟中断例行程序中,安装了自动复位功能。例如,在冻结大约15秒后强制恢复到TCP的LISTEN状态。

关于HTTP协议仅安装了GET方法部分。
作为简易HTTP服务器,根据来自web浏览器的要求,首先解析送来的URL中的参数(?之后),并把控制信息保存到PIC内部的EEPROM中,然后对各种外部接口进行控制。最后,把当前的PICNIC信息(上述的HTML文本)传送给浏览器。


1.2.4 固件的初期设定的顺序

固件的启动例行程序(投入电源时的设定,4651行~)的设定顺序如下:

(1)把初期设定时所需数据(IP地址设定等)从内藏EEPROM中复制到RAM

(2)LCD液晶显示面板的初始化

(3)EthernetNIC(RTL8019AS)的初始化,及把CONFIG寄存器的内容装入NIC

(4)从外置串行EEPROM93C46取得MAC地址

(5)把在(4)中取得的MAC地址写入NIC的PAR寄存器

(6)确认动作模式(通常or 引导)的跳线开关的状态。然后进入被选择模式的主例行程序

(7)如果有必要(IP=0.0.0.0的时候)从DHCP服务器获得IP地址,用广播发送DHCP协议的DISCOVER信息。

※在完成上面处理后,就进入帧信息的收信待机状态。

●PICNIC的使用方法

利用web浏览器的远程I/O控制LCD液晶模块利用专用控制协议的测试程序


1.3.1 利用web浏览器的远程I/O控制

在图3中显示了经由以太网,利用Microsoft Internet Explorer访问PICNIC的被分配的IP地址时的页面。
这个例子中使用的是全球IP地址:160.252.131.19/25。

<图3> 利用web浏览器的远程I/O控制的页面例(HTML版)

远程I/O控制页面大致分为下面3部分。

(1)I/O Ports区(section)

当前的I/O端口状态的显示。由于被显示的值没有实时更新的功能,故要取得当前的的状态时,需要按浏览器的「更新」按钮,或者单击此区中最下部的「reload」按钮。

作为端口状态,模拟输入端口(从RA0到RA3),温度传感器值(RA5,摄氏度值),数字I/O端口的输入输出状态被显示出来。

输出值的变更只能对RB2到RB7中被显示为OUT的端口。变更时只要点击[H]或者 [L]按钮,对应的值就会变更成那个值。

在这里假设服务器可以应答一个名为modify.cgi的CGI程序。当把 [输出端口=值] 作为URL的参数传递给服务器时,对应的输出就会被更改。
例如:对这个PICNIC进行设定的时候,如果把URL指定为
http://160.252.131.19/modify.cgi?RB7=H
,则输出端口RB7被变更为High, 同时线路板上的对应的LED也被点灯。

有关用于I/O端口控制的URL指定归纳如下:

[当前值的更新]
http://160.252.131.19/modify.cgi?

[例:输出端口RB7 -> H的变更]
http://160.252.131.19/modify.cgi?RB7=H

[例:输出端口RB7 -> L的变更]
http://160.252.131.19/modify.cgi?RB7=L


(2)Configuration区

显示当前被设定的IP地址,子网掩码(subnet mask),网关IP地址,以及各种功能用的端口号。

图3的例中各被设定成:IP地址:160.252.131.19,子网掩码25位,网关:160.252.131.1

更改设定值时,把数值输入到对应的文本域中后点击[Save]按钮。然后必须切断再投入电源,或者按复位开关。

如果点击[Default]按钮,作为默认值会被设定为局域IP用的设定值,IP地址:192.168.0.200,子网掩码24位。

如果把IP地址设定成0.0.0.0,就进入从DHCP(Dynamic Host Configuration Protocol)服务器获得IP地址的模式。

有关网络设定用的URL指定归纳如下:

[默认值]
http://160.252.131.19/submit.cgi?00b=192.168.0.200&04b=255.255.255.0&08b=0.0.0.0
&10w=80&12w=0&14w=10001&16w=10002

[返回初始值]
http://160.252.131.19/submit.cgi?INIT=Default

 

(3)Status区

显示包数及当前的IP地址。另外对于IP地址,只有是从DHCP获得的时候这个显示才有意义。


1.3.2 LCD液晶模块

LCD液晶面板被装上时,当前的IP地址设定值就会被显示出来。另外当处于从DCHP服务器获得IP地址的模式,并且成功地获得的时候,获得的IP地址会被显示出来。

※注意:在没有对LCD Port UDP:#设定值(即为0)时,面板上显示■■■■■。要显示IP地址,把这个值设定为如10000等。

不使用LCD面板的情况:
RB0~RB3为输入,RB4-RB7为输出(用户可以使用)

使用LCD面板的情况:
RB0,RB1为输入,RB2-RB7为LCD的控制输出(与用户可以使用的端口共用)


1.3.3 利用专用控制协议的测试程序

TriState公司在web上发布了利有专用控制协议的Windows上的测试程序(pictest.exe)。

http://www.tristate.ne.jp/picnic/menu.html

从这儿下载试样程序(pictest)+安装程序的LZH格式文件
http://www.tristate.ne.jp/picnic/pictest.lzh

然后,利用Lhasa等工具解冻后执行setuo.exe进行安装。

从[开始]→[所有程序]执行PICNIC test,对IP地址,显示内容的再取更新间隔及LCD面板的端口号进行设定后,点击连接按钮。这么一来它就按照被设定的更新间隔与PICNIC连接,显示当时的输入输出状态。而PICNIC的LCD面板的第二行则会显示来自pictest的连接,更新的时刻。

<图4> 利用测试程序远程更新I/O状态的例子

●PICNIC的专用控制协议

可以从下面的TriState公司的网站下载用于各种平台•程序语言的控制API驱动程序。

上述的1.3.3测试程序(pictest.exe)也利用了windows上的PICNIC.DLL库及Visual C++开发的。

在本实习中专用控制协议不是实习的对象。请各自研究。

http://www.tristate.ne.jp/picnic/menu.html

信州大学インターネット大学院

wasaki@cs.shinshu-u.ac.jp
Copyright(c) 2005 Katsumi Wasaki. All rights reserved.