3.1数据通信的建立

  TCP是面向连接的通信方式,它首先必须建立连接.然后才能利用IP地址和端口号进行数据通信。TCP有两种建立连接的方式,一是通过服务器模式(被动打开)等待连接请求;二是通过客户模式(主动打开)发送连接请求给服务器。本例采用TCP客户模式。在建立TCP连接之前,一般都需要初始化端口,包括设置端口号、设置W5100为TCP模式和写入OPEN命令。端口初始化主要配置端口0的相关寄存器,包括:S0_PORT、S0_MR和S0_CR。

  图5是W5100在TCP客户模式的处理流程。

  3.2中断处理

  在处理W5100的中断时,首先应访问W5100的中断寄存器(IR),可用MCU通过访问IR获得产生中断的来源。任何中断源都可以被中断寄存器(IMR)的相应位所屏蔽,因此,若要使用某个中断源,先要置位该中断源在IMR中的相应位,这样,当IR中对应位置位时,才会产生中断。此后当中断产生时,即进入中断处理程序。对于每个中断事件,处理方式可由用户自己定义。

  假如使用的是端口0中断。可在W5100的初始化程序中先将IMR中的IM_IR 0(端口0中断屏蔽位)置位。这样,当端口0中断发生时(IM_IR0=I,S0_INT=1),系统将开始读端口0中断寄存器(S0_IR),在W5100的端口寄存器中,主要设置有建立连接(CON)、终止连接(DIS

  CON)、数据发送完成(SEND_OK)、接收数据(RECV)和超时(TIMEOUT)等中断事件。

  3.3  数据接收

  当端口产生接收中断时,可调用接收函数S_rx_process(SOCKET s)将端口接收到的数据缓存到Rx_buffer数组中,并返回接收的数据字节数。当读完所有的数据后,可将接收存储器读指针寄存器(S0_RX_RD)的值加上读取的数据长度,然后再写入S0_RX_RD,最后向端口0的命令寄存器(S0_CR)写入RECV命令,以等待下次接收数据。但要注意在计算实际物理偏移量rx_offset时,S_RX_SIZE必须保证和在初始化代码中定义的接收缓存区的大小一致。

  3.4  数据发送

  通过Socket发送数据时,首先把要发送的数据缓存在Tx_buffer中。此外,在发送数据时,还需先检查发送缓存区的剩余空间的大小,然后控制发送数据的字节数。端口发送缓存区的大小由发送存储器空间寄存器(TMSR)确定。在数据发送处理过程中,剩余空间的大小将因写入数据而减少,发送完成后又自动增加。把Tx_buffer的数据完全写入端口的发送数据缓存区后,可将端口传输写指针寄存器(Sn_TX_WR)中的值加上写入的数据长度,再写入Sn_Tx_WR,以指示发送数据的长度,最后在命令寄存器(Sn_CR)中写入SEND命令,以启动发送。

4 通信接口的软件设计
4.1 初始化程序设计
 本系统初始化通过定义结构体的方式完成STM32F105V微处理器和W5100的初始化[4-5]。
微处理器完成系统时钟、外设时钟、系统启动模式、嵌入式向量式中断控制寄存器、I2C、通用输入输出接口、通用异步接收发送器、通用定时器以及SPI等的初始化。
 W5100的初始化主要设置一些关键的寄存器:
 (1)设置模式寄存器(MR)bit[7](软件复位位)为1,初始化芯片内部寄存器,复位后自动清0。
 (2)设置中断屏蔽寄存器(IMR)为OxFF(屏蔽中断源),启动IP地址冲突异常中断和端口n寄存器(Sn_INT)中断等,通过向相应的中断屏蔽位写1,任何时候只要中断寄存器(IR)对应的位也置1,则中断将产生,CPU通过访问IR获得中断来源。
 (3)设置重发时间寄存器(RTR)为200 ms(Ox07D0),当发出连接、断开等命令而没有收到远程对端的响应或响应延迟时,产生重发过程。
 (4)配置重发计数寄存器(RCR)为8,设定重发的次数。
 (5)设置接收缓冲区的大小寄存器(RMSR)和发送存储空间大小寄存器(TMSR)都为0x55,每个端口接口和发送存储空间分别分配2 KB的存储空间。
 (6)设置端口n模式寄存器(Sn_MR)为OxA1,启动广播功能,设置端口n协议类型为TCP模式。
 (7)设置端口n命令寄存器(Sn_CR),端口的初始化、建立/断开连接以及数据传输等。
 (8)设置端口n的最大分片长度寄存器(Sn_MSS)为1 460。
 初始化完成后,根据SPI协议编写发送字节函数SPI_SendByte(),配合Read_W5100和Write_W5100完成字节的读取和发送,这里需要定义读操作码(OxF0)和写操作码(Ox0F),实现微处理器与W5100数据通信。
4.2 Socket初始化程序设计
 W5100与终端之间的数据交换有多种通信方式,本文采用基于TCP模式的通信方式。TCP是以连接为基础的通信方式,端口n在进行数据通信时,必须先建立连接。TCP有两种建立连接方式,一种是服务器模式(被动模式),需要等待连接请求;另一种是客户端模式(主动打开),需要发送连接请求给服务器。本设计配置W5100为服务器模式,只需对W5100的Socket进行配置就可以完成网络数据的收发和启动功能。
 当Socket作为服务器模式时,初始化端口需要设置运行模式(Sn_MR)和本机端口号(Sn_Port),并在端口命令寄存器打开(OPEN)端口。引用Socket_Listen(SOCKET s)程序,只调用一次该程序就可使W5100设置为服务器模式。主要程序如下所示。
 Write_W5100((W5100_S0_MR+s*0x100),S_MR_TCP);
 //设置Socket为TCP模式
 Write_W5100((W5100_S0_CR+s*0x100),S_CR_OPEN);
 //打开Socket
 Write_W5100((W5100_S0_CR+s*0x100),S_CR_LISTEN);
 //设置Socket为侦听模式
 Write_W5100((W5100_S0_CR+s*0x100),S_CR_CLOSE);
    //关闭Socket
 完成Socket的打开和设置侦听工作后,至于远程客户端是否与其连接,则需要等待Socket中断,在服务器侦听模式下,不需要设置目的IP和目的端口号。
 W5100在TCP服务器模式下的处理流程如图4所示。

4.3 中断处理程序设计
 本设计采用中断方式来处理数据包的接收和发送,以提高效率。在W5100处理中断的过程中,微处理器首先通过应访问W5100的中断寄存器(IR)获得产生中断的来源。中断寄存器与中断屏蔽寄存器配合使用,且位是一一对应的,中断屏蔽寄存器(IMR)的相应位可屏蔽中断寄存器中任何中断源。因此,若要使用某个中断源,先要将该中断源在中断屏蔽寄存器中的相应位置位,以打开所需的中断源,这样,中断才会产生。当中断产生后,即进入中断处理程序。本设计中的中断源主要包括端口n中断事件。一般设置有Socket成功连接(S_IR_CON)、断开连接(S_IR_DISCON)、数据发送完成(S_IR_SENDOK)、接收到数据(S_IR_RECV)或传输超时(S_IR_TIMEOUT)等事件中断。
 本文以端口0接收到数据包后的产生一个接收数据中断为例说明中断处理过程。首先,在使用端口0中断之前,应在初始化程序中将中断屏蔽寄存器(IMR)中的端口0置位(IMR_S0_INT),当Socket0发生中断时,IMR_S0_INT=1、IR_S0_INT=1、动态LED灯亮显示接收状态,此时,W5100的中断输出管脚(/INT)输出低电平,以通知微处理器有中断产生,微处理器访问中断寄存器获取中断源为接收数据中断;然后进入中断处理函数,启动发送函数(S_rx_process)。
4.4 Socket数据接收程序设计
 当端口接收数据时,产生接收中断。首先调用端口接收数据包函数Process_Socket_Data(),并对接收到的数据类型进行判断和加工。本过程先调用接收函数S_rx_process()从W5100端口的接收数据缓存区读取数据,然后将读取的数据加上接收存储器读指针寄存器(S0_RX_RD)的值再写入S0_RX_RD,最后将RECV命令重新写入端口0的命令寄存器(S0_CR),以等待下次数据的接收。或者将处理完的数据拷贝到发送缓冲区,再调用S_tx_process函数发送数据包给CPU。主要程序如下:

 其中Oxaa和Ox55为接收数据包的标志头;长度位为数据包字节长度,不包括数据包头和本身字符,命令位为对对象数据的操作,为0时读取数据,为1时设置对象数据,目标代码位用来显示对象代码,如Ox00为网关IP、Ox01为子网掩码、0x02为物理地址、LED为状态显示等;数据位为接收到的数据,数据是以16进制形式接收,最后再加上2 B的数据报头和1 B的数据本身。
4.5 Socket数据发送程序设计
 通过Socket发送数据时,调用发送数据函数S_tx_process。首先把要发送的数据缓存在发送缓冲区(Tx_buffer)中。此外,在发送数据时,需先检查发送缓存区的剩余空间的大小(Sn_TX_FSR),控制发送数据的字节数,如用以太网协议发送的数据最大传送单元(MTU)不超过1 500 B。在TCP服务器模式下,在数据发送处理过程中,可不设置目标主机的IP和端口号。剩余空间的大小因写入数据的增加而减少,数据发送后又自动增加。当发送缓冲区的数据完全写入端口的发送数据缓存区后,则将数据本身长度加上端口传输写指针寄存器(Sn_TX_WR)中的值再写入Sn_Tx_WR,再计算发送缓冲区的偏移量(tx_offset),用于指示发送数据的长度,最后启动发送(Sn_CR_SEND)。相关程序如下:
 i=tx_offset/S_TX_SIZE  //计算实际物理偏移值,
 //S_TX_SIZE由TMSR定义为2 K
 tx_offset=tx_offset-i*S_TX_SIZE  //计算实际物理地址
 //j= W5100_TX+s*S_TX_SIZE+tx_offset
   Write_W5100(j,Tx_Buffer[i])     //将发送缓冲区中的
 //数据写入到端口的发送缓冲区
 Write_W5100((W5100_S0_CR+s*0x100),S_CR_SEND)
 //启动发送的指令
 

转载于:https://www.cnblogs.com/pulan/archive/2013/03/15/2960776.html

w5100 网上资料整理相关推荐

  1. 手机扫描条形码二维码原理和实现等网上资料整理

    有志于要从事条形码和二维码开发的同学,和我一样想多了解这方面的东西.但是苦于网上资源甚少,我已经把现有资源整理如下. 原理.实现方案.代码资源.规则是否通用比如加密如何实现? ============ ...

  2. 吴恩达深度学习教程——中文笔记网上资料整理

    吴恩达深度学习笔记整理 内容为网上博主博文整理,如有侵权,请私信联系. 课程内容: Coursera:官方课程安排(英文字幕).付费用户在课程作业中可以获得作业评分,每门课程修完可获得结课证书:不付费 ...

  3. C++ builder 操作Excel方法(据网上资料整理)

    c++ builder 操作Excel方法,下面是从网上找到的一些不错的方法,学习一下: 1 用OLE操作Excel(目前最全的资料)(04.2.19更新) 2 3 本文档部分资料来自互联网,大部分是 ...

  4. Xcode 免证书开发调试(结合网上资料整理)

    参考资料来源: http://www.51testing.com/?uid-225927-action-spacelist-type-blog http://bbs.9ria.com/thread-7 ...

  5. 在Mapnik中显示中文(网上资料整理)

    前提:数据源不能是Shapefile. 步骤: 1 下载字体 2 把字体解压缩到Mapnik的字体文件夹下,我的是"C:\mapnik-0.7.1\lib\mapnik\fonts" ...

  6. [网上资料整理]关于标准电阻阻值的说明(E6、E12、E24、E48、E96、E192)

    关于电容电阻的使用,只知道有一些所谓的典型值,有助于选型,却不知道这些值是怎么来的.今天查了一下,才发现所谓的"E"规格. " E "表示"指数间距& ...

  7. 机器学习资料整理,收藏了不后悔!

    学习Machine Learning也有很长一段时间了,前段时间在paper中应用了GTB(Gradient Tree Boosting)算法.在我的数据集上GTB的performance比Rando ...

  8. Go语言学习资料整理

    整理网上找到的Golang语言学习资料 基础 基础教程 书籍在线版 Go 指南-A Tour of Go Go语言圣经(中文版) Effective Go中文版 Go Web编程 build-web- ...

  9. 软件设计师提纲+复习资料整理(上午题)

    文章目录 软件设计师考试大纲 上午题(选择题) 一.计算机组成原理 考点:CPU结构组成 考点:原码.反码.补码定点整数范围 考点:浮点数表示 考点:RISC和CISC计算机的区别 考点:奇校验与偶校 ...

最新文章

  1. 三大框架开发时,spring配置文件出现异常
  2. WINDOWS系统调用 和 SYSENTER系统服务调用过程
  3. 看动画学算法之:递归和递归树
  4. ASP.NET AJAX Timer Trouble? Location is key.
  5. windows hosts 作用以及常见问题解决
  6. 关于机器学习模型的评估方法
  7. uniapp map 制作一个简单的地图导航
  8. 数据结构之数组的存储
  9. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——2.2 能知旋律但不知歌名,使用哼唱搜索来找歌...
  10. 【Meta Learning学习笔记】Meta Learning详解
  11. html5数独游戏设计,数独游戏的前端实现
  12. 论文笔记—RGB-D SLAM in Dynamic Environments Using Static Point Weighting
  13. android仿微信录制短视频,拍照,自动聚焦,手动聚焦,滑动缩放功能(Camera+TextureView+rxjava实现)
  14. Windows浏览器无法联网,提示代理服务器没有响应
  15. 樊登读书赋能读后感_樊登读书会本周末视频解读新书:《赋能》突破深井,打造优质团队...
  16. ue4子弹追踪与魔法子弹 逆向教程
  17. 北大数学系「扫地僧」韦东奕爆红!拒绝哈佛offer,留任北大,却因长相引热议...
  18. DSPE-PEG-SP2-AA,二硬脂酰基磷脂酰乙醇胺-聚乙二醇-SP2-AA,具有较好的生物相容性和被动靶向性,可应用于药物输送系统
  19. 联想电脑一开机出现Checking Media Presence……
  20. 无人机云台电机用的是哪种?

热门文章

  1. 4怎样判断动作是否执行_公众号交易时要怎样去判断粉丝是否真实的呢?
  2. python打印进度条starting...done_python打印进度条-tqdm
  3. 系统架构设计师证书含金量_计算机专科生不能错过的两个证书,含金量比较高,出社会有益...
  4. 解决ubuntu连不上网络,输入ifconfig只显示本地环回问题
  5. 学习《apache源代码全景分析》之摘录
  6. 推荐系统(工程方向)-策略平台
  7. 聊聊高并发(二十三)解析java.util.concurrent各个组件(五) 深入理解AQS(三)
  8. Java Web学习总结-文件下载
  9. shell脚本备忘录
  10. 多模块Maven工程单独打包某一模块工程