历史上的今天
返回首页

历史上的今天

今天是:2025年03月05日(星期三)

正在发生

2021年03月05日 | 基于MC9328MXl的Socket通信设计与实现

2021-03-05 来源:eefocus

1 引言

目前,嵌入式系统已经广泛应用到人们的工作、生活中,2003年我国嵌入式系统应用产品经济总量达l 000亿元。随着技术的发展,8位MCU市场已逐步趋向稳定,32位MPU代表着嵌入式技术的发展方向,正在加速发长。在32位嵌入式微处理器市场上,基于ARM内核的微处理器处于绝对的领导地位。


嵌入式系统是以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统除了具有高效、稳定、性能专一等优点外,还具有实时性较高的操作系统。嵌入式系统与通信、网络技术的结合可以极大增强网络的智能化与灵话性,拓展通信功能,从而实现各种通信系统之间的互联互通。本文给出了一种适合于中/低端应用的通信平台设计方案,它可支持以太网之间的数据传输,并且具有RS232、RS485、USB等接口。文中围绕嵌入式Linux环境设计了基于MC9328MXl(ARM920T)最小系统的硬件通信平台,从而实现了嵌入式Socket通信。


2 最小系统分析

Motorola公司的MC9328MXl是以ARM920T为内核的高性价比16/32位RISC微控制器,内含一个ARM公司设计的16/32位ARM920T RISC处理器核,ARM920T为低功耗,高性能16/32位核,最适合于对价格及功耗敏感的应用场合。除了ARM920T核以外,MC9328MXl还包含了许多外围功能模块。处理器和这些模块都集成在核心板上,其具体结构如图1所示。



由图1可见,除了ARM920TDMI内核外,MC9328MXl还集成了多个外围功能模块:一个LCD控制器、一个脉冲调制控制器、一个USB控制器及多个扩展通道,但是没有集成用于网络通信的以太网控制器。所以,需要设计包含合适的以太网控制器的外围电路。


3 外围电路设计

本系统选用与MC9328MXl相匹配的CS8900A作为以太网控制器。CS8900A是Cirrus Logic公司生产的低功耗16位以太网控制器,功能强大。该器件的突出特点是使用灵活,其物理层接口、数据传输模式和工作模式等都能根据需要动态调整,通过内部寄存器的设置来适应不同的应用环境。


CS8900A内部结构框图如图2所示,内部功能模块主要是802.3介质访问控制块(MAC)。802.3介质访问控制块支持全双工工作模式,完全依照IEEE802.3以太网标准,采用100引脚TQFP封装,负责处理有关以太网数据帧的发送和接收,包括:冲突检测、帧头的产生和检测、CRC校验码的生成和验证。通过对发送控制寄存器(TxCMD)的初始化配置,MAC能自动完成帧的冲突后重传。如果帧的数据部分少于46个字节,它能生成填充字段使数据帧达到802.3所要求的最短长度。



CS8900A的主要特点如下:


符合IEEE802.3以太网标准,并带有ISA接口;


片内4KB RAM;


适用于I/O工作模式、存储器工作模式和DMA工作模式;


带有传送、接收低通滤波的lOBase2T连接端口;


支持lOBase2,lOBase5和lOBase2F的AUI接口;


自动生成报头,自动进行CRC检验,冲突后自动重发;


最大电流消耗为55mA(5 V电源);


全双工工作模式;


支持外部EEPROM。


另外,要实现CS8900A与主机之间的数据通讯,在电路设计时可根据具体情况灵活选择合适的数据传输模式。CS8900A支持的传输模式有:I/O模式和Memory模式,另外还有DMA模式。其中,I/O模式是访问CS8900A存储区的缺省模式,简单易用。


由MC9328MXl的引脚描述可以看出,MCU的数据是通过D[3l:0]传输的,而以太网控制器CS8900A最多使用16位传输模式,所以MC9328MXl的数据总线前16位(D[15:0])应与CS8900A的SD[O:15]相连,为解决速度不匹配的问题,需使用具有缓冲功能的总线收发器。从成本考虑,该系统采用两个8位的74LS245。地址信息通过MC9328MXI地址总线接口的A[DO:03]与CS8900A的SA[00:03]通过缓冲器74HC244相连,A[04:19]与SA[04:19]直接相连用于设置网卡的初始基址。另外,CS8900A通过一个带扼流线圈的隔离变压器20F001N将CPU发送的数据(变比为l:1.414)发送到网络上;接收数据时,网络传送的数据经过隔离变压器(变比为1:1)。隔离变压器的作用主要是将外部线路与CS8900A隔开,防止干扰和烧坏元件,实现带电的插拔功能。XTALl与XTAL2之间的晶振为CS8900A提供稳定的时钟脉冲。其电路图如图3所示。



4 基于嵌入式Linux的Socket通信

基于嵌入式Linux的开发环境一般由装有交叉编译器的PC机和硬件开发板组成。本设计以PC宿主机作为客户端,以MC9328MXl的开发板作为服务器实现通信。先由PC机将客户机程序(server)编译好后,通过串口写入开发板,然后将开发板与PC机通过以太网口建立连接。


Socket(套接字)是通过标准UNIX文件描述符和其他程序通讯的一个方法,其实质是提供了进程通信的端点,可以看作是一种特殊的管道。通过Sock-et编程可以实现网络通信。一个完整的套接字有一个相关的描述:协议、本地地址、本地端口、远程地址、远程端口。


通用套接口地址结构struct sockaddr的定义如下:




套接字操作函数主要有:


(1)创建一个Sockets


sockfd=socket (family,type,protocol)


其中由地址类(family)参数指定该Socket使用的地址类。由类型(type)参数规定所请求的通信类型。协议(protocol)参数一般为零,使得默认的协议将自动被选取。


(2)连接本地地址


本函数的主要功能是将一个规定的地址与一个Sockets结合,一个服务进程要使用如下函数:bind(sockfd,address,addrlen)其中,sockfd参数是由socket()调用返回的sockets描述符。address指向一个地址结构,addrlen参数规定了地址的字节长度。


(3)客户进程连接到服务进程


用此函数实现客户进程对服务进程连接的初始化。此系统调用是:


connect(sockfd,address,addrlen)


其中,sockfd是本地Sockets的Sockets描述符。address规定目的机上服务进程正在使用的地址,addrlen规定了地址的字节长度。


当connect()函数被调用时,如果客户的Sockets还没有结合到一个本地地址,则系统自动选择一个本地地址和一个适当的端口号,并且把它们和该客户的Sockets相结合。


(4)网络监听


int listen(int sockfd,int backlog);


sockfd是Socket系统调用返回的Socket描述符;backlog指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待accept ()(参考下文)。backlog对队列中等待服务的请求的数目进行了限制,大多数系统缺省值为20。如果一个服务请求到来时,输入队列已满,该Socket将拒绝连接请求,客户将收到一个出错信息。当出现错误时listen函数返回-l,并置相应的errno错误码。


(5)接收请求函数


accept()函数让服务器接收客户的连接请求。在建立好输入队列后,服务器就调用accept函数,然后睡眠并等待客户的连接请求。


int accept(int sockfd,void*addr,int*addrlen);


sockfd是被监听的Socket描述符,addr通常是一个指向sockaddr_in变量的指针,该变量用来存放提出连接请求服务的主机的信息;addrlen通常为一个指向值为sizeof(struct sockaddr_in)的整型指针变量。


(6)数据传输


Send()和Recv()这两个函数应用于面向连接的Socket上进行数据传输。


Send()函数原型为:int send(int sockfd,const void*msg,int len,int flags);sockfd是用来传输数据的socket描述符;msg是一个指向要发送数据的指针;len是以字节为单位的数据长度;flags一般情况下置为0。


Recv ()函数原型为:int Recv(int sockfd,void*buf int len,unsigned int flags);sockfd是接受数据的Socket描述符;buf是存放接收数据的缓冲区;len是缓冲的长度。flags也被置为O。Recv()返回实际上接收的字节数,当出现错误时,返回-1并置相应的errno值。


本部分设计的目的是通过分析Socket的编程方法,编写一个服务器程序server,用arm-linux-gcc编译后运行在ARM开发板上,一个客户端程序client用gcc编译后在PC上运行。


总体编程模型即客户机与服务器的通信过程见图4。



4.1 服务器端

(1)初始化



4.2 客户机端

(1)通过服务器域名获得服务器的IP地址



(2)创建一个Socket(实现方法与服务器端相同)


(3)与服务器建立连接



这样,给ARM开发板CS8900A网卡分配地址,并且编译server和client程序后,可以将开发板用作服务器,PC用作客户端,实现两者的通信。


5 结束语

本文设计开发了基于MC9328MXl的以太网通信系统,并利用嵌入式linux操作系统强大的网络功能实现了Socket通信。文中的客户端应用程序已经在基于ARM9TDMI核的MC9328MXl处理器的嵌入式开发平台上成功运行,应用宿主PC机的服务器端应用程序成功实现了Socket通信。当然,也可以把目标硬件开发平台当作服务器端,而把宿主PC机当作客户端来进行双向文件传输。


推荐阅读

史海拾趣

BEI Sensors公司的发展小趣事

随着公司业务的不断发展,Beckhoff开始积极拓展全球市场。经过数十年的努力,公司的分支机构已经遍布世界各地,业务覆盖全球60多个国家。通过与全球合作伙伴的紧密合作,Beckhoff成功地将其自动化产品和解决方案推向全球市场,为全球客户提供优质的服务。

Apacer公司的发展小趣事

1997年,Apacer宇瞻科技在台湾创立,初期专注于DRAM模组的专业供货。公司凭借对半导体垂直整合的完整内存模组技术能力和专业营销业务,迅速在全球市场上打响了Apacer的自有品牌。1999年,宇瞻科技更是跃升为全球第四大内存模组厂商,奠定了其在行业内的领先地位。

Eagle Plastic Devices公司的发展小趣事

Eagle Plastic Devices公司成立于20世纪90年代初期,当时市场上对于高性能塑料电子部件的需求日益增长。公司创始人张先生,凭借其在塑料材料科学和电子工程领域的深厚背景,带领团队研发出了一系列具有革命性的塑料电子封装和连接器产品。这些产品以其优异的电气性能、耐用性和成本效益,迅速在行业内获得了认可,为Eagle Plastic Devices公司奠定了坚实的基础。

ABECO公司的发展小趣事

品质是ABECO的生命线。公司始终坚持严格的质量管理体系,从原材料的采购到生产过程的控制,再到产品的检测和包装,每一个环节都严格把关。此外,公司还定期举行质量培训活动,提高员工的质量意识。这种对品质的执着追求,使得ABECO的产品在市场上始终保持着良好的口碑和竞争力。

Everspin公司的发展小趣事

在XXXX年,Everspin的股票开始在纳斯达克全球市场交易,股票代码为MRAM。这一上市动作不仅为Everspin提供了更多的资金支持,也进一步提升了其在行业中的知名度和影响力。此外,兆易创新旗下的GigaDevice半导体(香港)有限公司还斥资500万美元购买了Everspin约5%的股份,显示出市场对Everspin技术和发展前景的认可。

德欣(COV)公司的发展小趣事

德欣(COV)公司自创立之初,就致力于压敏电阻器、SPD防雷芯片、智能过压保护器等核心电子元件的研发与生产。公司创始人凭借对电子行业发展趋势的精准判断,以及对技术创新的执着追求,成功研发出了一系列具有竞争力的产品。这些产品不仅满足了当时市场的需求,也为德欣公司在电子行业打下了坚实的基础。

问答坊 | AI 解惑

【藏书阁】图表细说元器件及实用电路

目录: 第1章 新概念电子电路入门基础 1.1 熟悉最基本的日常电路 1.1.1 电工电路与电子电路的区别 1.1.2 电子电路图和电路图识图信息解析 1.1.3 常见电子电路种类解说 1.2 掌握基本的技术名词和概念 1.2.1 电流概念解说 1.2.2 电位、电压 ...…

查看全部问答>

7*1W LED驱动 方案 FAN103 做出来的成本是否有竞争性

7*1W LED驱动 85-265输入 变压器隔离 恒流输出 成本上考虑是否适用; 有比这方案更好的吗? …

查看全部问答>

如何调试nandflash??(如题软件调试)

大家做过的,给点提示。多谢。…

查看全部问答>

串口传送数据传了3个字节,只显示一个字节

uchar buffer[]={0xaa,0xbb,0x64}; void init_serial();  //串品初始化 void senddata(uchar *buffer,uchar length);//发送数据 void senddata(uchar *buffer,uchar length) {   uchar i;   for(i=0;i…

查看全部问答>

有关遨游设置问题

遨游右上角有我的电脑、注册表编辑器 什么的 想把其中一个改为WORD  编辑的命令是什么? …

查看全部问答>

在XP中无法正常使用数码相机的问题!

在下有一套 SIPIX矽峰SC-1300/SC-2100的数码相机,驱动程序只支持到WindowsXP SP1,在SP2的系统上就不行了(驱动能装上,但是使用Photoshop等软件都无法引入图象,但windows2003/windows2000/windowsXP SP1下就可以正常使用),去下载驱动,发现我这个驱动 ...…

查看全部问答>

LPC1114中的CT32B0_MAT2与CT16B1_CAP0都是具体怎么解释啊

请问LPC1114中的CT32B0_MAT2与CT16B1_CAP0都是具体怎么解释啊…

查看全部问答>

无叶风扇原理图

最近想搞个无叶风扇,不知道大家谁有它的图纸参考下。还有,它的电机是不是步进电机?电机上也没有型号文字。在此先谢了。…

查看全部问答>

草根创业回忆录一: 踏出了第一步的时候...

草根创业回忆录一: 踏出了第一步的时候... 前言:当现状已经变得不如意的时候,不同的人便有了不同的反映:有的人整天的在唉声叹气,有人在咬牙的骂爹咒娘,有的在另谋高就,更有些人在蠢蠢欲动…          ...…

查看全部问答>

激光信号转换为电信号问题

请教大家一问题,用什么器件,可以将激光信号转换为电信号呢?…

查看全部问答>