沈健,潘进
(1.苏州健雄职业技术学院,江苏太仓,215411;2.浩科机器人(苏州)有限公司,江苏太仓,215400)
集线器(HUB)属于数据通信系统中的基础设备,具有流量监控、数据交换功能,是一种不需任何软件支持或只需很少管理软件管理的硬件设备,它被广泛应用到各种场合。大多数集线器属于纯硬件网络底层设备,不具有类似于交换机的"智能记忆"能力和"学习"能力。发送数据时都是没有针对性的,而是采用广播方式发送。也就是说当它要向某节点发送数据时,不是直接把数据发送到目的节点,而是把数据包发送到与集线器相连的所有节点。这种设备的广播发送数据方式有三方面不足:(1)用户数据包向所有节点发送,带来不安全因素,很容易就能非法截获他人的数据包。(2)由于所有数据包都是向所有节点同时发送,数据传送过程中容易堵塞,降低了执行效率。(3)双向接口只需要3根线制作,非平衡电路使得RS-232非常的容易受两设备间基点电压偏移的影响很容易发生串话的问题。
本设计利用嵌入式系统设计的一款智能集线器,当节点提出交换数据信息的请求时,数据包发送给对应节点,其他没有需求的节点将不会接收数据包,如图1所示。
图1 集线器
本集线器是由一个从端口和两个主端口组成,系统在通电之前,通过对波特率设置开关的设置,确定主从端口数据的波特率。集线器上电后通过嵌入式系统检测串口通信主端口是否有请求信号发出,请求信号包含连接主端口的设备需要采集的数据协议,当集线器接收到相应主端口发送过来的数据包后,保存对应主端口号,并将接收过来的数据包完整发送给从端口。连接在从断口上的设备接收到发送过来的数据包,进行解析,根据通信协议,发送对应数据包所需要的数据包给集线器,集线器收到从端口发送过来的数据包后,根据保存的主端口号,有选择的将从端口号的发送过来的数据包发送给对应的从端口设备,完成一次数据请求发送的通信。本集线器系统结构图设计如图2所示。
图2 系统结构图
本集线器系统大致分为5个电路模块,分别是:嵌入式控制核心模块、多路串口通信模块、电源电路模块、串行E2PROM存储单元模块、波特率设置开关控制模块。电源电路模块给集线器提供3.3V电源,外接电源12~24V电源模块。波特率设置开关电路通过三路拨码开关设置8种波特率,确保主从端口接收发送数据波特率一致,波特率设置对应分别是:
STM32F103RBT6内置了3个通用同步/异步收发器,多路串口通信模块采用SP232EEN芯片,本次串口通信采用三线标准制RXD、TXD和GND,由于本集线器使用在本地设备中而且是点对点,传输距离近,所以采用RS232异步串行通信模式。这种通信模式是以字符为传输单位,相邻两个字符间隔时间不定,接收和发送的波特率是由三位开关设置。由于主口设备数据包格式不一致,我们在编程时不考虑数据格式,接收数据时采用查询方式确定数据包的字节数,并将数据包以字符形式存储在E2PROM队列里,发送数据时根据字节数到E2PROM队列里读取数据发送确保数据传输不丢包。
串行E2PROM存储单元模块采用FM24V02芯片保存读取端口号及对应传递的数据包,FM24V02是一款256Kb的3V串行F-RAM存储器,使用双线协议。该FM24V02执行写操作时,没有写入延迟发生,速度快等特点。下一个数据循环可立即开始,而不需要数据轮询。串口通信模块及存储模块如图3所示。
图3 串口通信模块及存储模块
程序设计要求有:(1)确保接收的数据和发送的数据一致;(2)哪个主端口提出数据请求,从设备收到数据后解析把结果发送给对应的端口。由于STM32单片机带IDLE中断,所以利用这个中断,可以接收不定长字节的数据。我们在做数据通信的时候通过命令开启通信,通信要求实时且准确不丢帧。开始是定义了一个大数组,将该缓存数组定义成接收的长度,然后每次接收后清除该buff,而且要确保系统发送的数组长度要一定时才不会出错,但顺序会变化,并每次在接收到数据后都通过指令memcpy(d,s,strlen(s))复制到队列中,确保数据不丢失。
程序开始运行后,先配置硬件,硬件配置主要是对串口异步通行和E2PROM队列清零进行配置,然后进入接收数据模块,判断各路串口是否有数据包接收,如果有,则将该数据包保存在E2PROM存储单元队列中;如果没有则巡回检测各路端口是否有数据包接收,详情见图4;当系统发现E2PROM队列中有新的数据包后,就读取该数据包,并清零该队列,然后将该数据包发送给指定的端口,详情见图5。
我们采用一个相同硬件的线路板作为测试板,通过串口调试助手软件读取主端口接收发送的数据包,让测试板从口接到待测线路板的从口上,待测线路板上的2路主口通过RS232串口线接到PC的串口上,我们在做测试程序的时候,让测试版上从口接收的数据原路发送,这样我们就可以通过对待测线路板上主口发送任意字节(不超过1000个字节)数的数据,查看是否有同样字节的数接收,这样就能确定发送接收不丢包点对点的测试,完成客户要求。图6是我们测试的一个样图。
图4 发送数据程序框图
图6 系统调试图
本集线器工作过程很简单,很实用,性价比高。集线器种类很多,客户需求也各不一样,这就要求我们集线器要不断调整功能,满足客户的需求。