1. W5100S

1.1 简介

W5100S 是一款多功能的单芯片网络接口芯片,内部集成全硬件的TCP/IP协议栈,以太网MAC和 10Base-T/100Base-TX以太网控制器。主要应用于高集成、高稳定、高性能和低成本的嵌入式系统中。 使用W5100S,用户MCU可以方便的处理IPv4,TCP,UDP,ICMP,IGMP,ARP,PPPoE等各种TCP/IP协议。W5100S分别拥有8KB的发送缓存和接收缓存,可以最大限度地减少MCU的开销。 主机还可以同时使用W5100S的4个独立的硬件SOCKETs,并基于每个硬件SOCKET开发独立的互联网应用。

W5100S支持SPI接口和并行系统总线接口。 它还提供低功耗/低热量设计,WOL(Wake On LAN),以太网PHY掉电模式等。

W5100S是基于W5100改进的低成本网络接口芯片。W5100使用的任何固件及程序都可以直接在W5100S上使用,无需任何修改。 此外,W5100S采用48引脚LQFP和QFN无铅封装,明显小于W5100的80引脚封装,方便产品小型化

1.2 W5100S与W5100、W5500的区别

型号参数 W5500 W5100 W5100S
内部架构 全硬件TCP / IP协议栈+ MAC + PHY 全硬件TCP / IP协议栈+ MAC + PHY 全硬件TCP / IP协议栈+ MAC + PHY
交互接口 SPI SPI,8bit bus SPI,间接总线
SOCKET数 8 4 4
收发缓存 32KB 16KB 16KB
MAX速率(Mbps) 16 25 25
Sleep mode O X X
Hybrid mode O O O
工作温度 -40℃ ~ 80℃ -40℃ ~ 80℃ -40℃ ~ 80℃
工作电压 3.3V/5V 3.3V/5V 3,3V/5V
性能转换 不支持极性自动转换 支持极性自动转换 支持极性自动转换
支持的全硬件TCP\IP协议 TCP、UDP、IP、ICMP、MAC、IGMP、PPPoE、Ethernet MAC TCP、UDP、IP、ICMP、MAC、IGMP、PPPoE、Ethernet MAC TCP、UDP、IP、ICMP、MAC、IGMP、PPPoE、WOL
封装工艺 LQFP48 无铅封装(7x7mm,间距 0.5mm) LQFP80 无铅封装 48 管脚 LQFP 封装和 QFN 封装 (无铅,7x7mm, 0.5mm 间距)

2. W5100S网卡的TCP-Client回环测试

2.1 CC2652RB硬件SPI的介绍

使用 CC2652RB 的 SDK 开发包提供的例程 ( spimaster ) 加以修改来驱动 W5100S 网卡.

SDK里已经把它所有外设的驱动都封装成库,只要按照 <ti/drivers/SPI.h> 文件中提供的说明,按顺序调用对应的API即可使用,例如:

/*!******************************************************************************  @file       SPI.h**  @brief      Serial Peripheral Interface (SPI) Driver Interface** @anchor ti_drivers_SPI_Overview*  # Overview*  The Serial Peripheral Interface (SPI) driver is a generic, full-duplex*  driver that transmits and receives data on a SPI bus.  SPI is sometimes*  called SSI (Synchronous Serial Interface).*  The SPI protocol defines the format of a data transfer over the SPI bus,*  but it leaves flow control, data formatting, and handshaking mechanisms*  to higher-level software layers.**  The SPI driver operates on some key definitions and assumptions:*  - The driver operates transparently from the chip select. Some SPI*    controllers feature a hardware chip select to assert SPI slave*    peripherals. See the specific device implementations on chip*    select requirements.**  - The SPI protocol does not account for a built-in handshaking mechanism*    and neither does this SPI driver. Therefore, when operating in*    #SPI_SLAVE mode, the application must provide such a mechanism to*    ensure that the SPI slave is ready for the SPI master. The SPI slave*    must call #SPI_transfer() *before* the SPI master starts transmitting.*    Some example application mechanisms could include:*    - Timed delays on the SPI master to guarantee the SPI slave is ready*      for a SPI transaction.*    - A form of GPIO flow control from the slave to the SPI master to notify*      the master when ready.**  <hr>*  @anchor ti_drivers_SPI_Usage*  # Usage**  To use the SPI driver to send data over the SPI bus, the application*  calls the following APIs:*    - SPI_init(): Initialize the SPI driver.*    - SPI_Params_init():  Initialize a #SPI_Params structure with default*      values.  Then change the parameters from non-default values as*      needed.*    - SPI_open():  Open an instance of the SPI driver, passing the*      initialized parameters, or NULL, and an index to the configuration to*      open (detailed later).*    - SPI_transfer():  Transmit/receive data.  This function takes a*      #SPI_Transaction argument that describes the transfer that is requested.*    - SPI_close():  De-initialize the SPI instance.**  @anchor ti_drivers_SPI_Synopsis*  ## Synopsis*  The following code example opens a SPI instance as a master SPI,*  and issues a transaction.**  @code*  SPI_Handle      spi;*  SPI_Params      spiParams;*  SPI_Transaction spiTransaction;*  uint8_t         transmitBuffer[MSGSIZE];*  uint8_t         receiveBuffer[MSGSIZE];*  bool            transferOK;**  SPI_init();  // Initialize the SPI driver**  SPI_Params_init(&spiParams);  // Initialize SPI parameters*  spiParams.dataSize = 8;       // 8-bit data size**  spi = SPI_open(CONFIG_SPI0, &spiParams);*  if (spi == NULL) {*      while (1);  // SPI_open() failed*  }**  // Fill in transmitBuffer*  spiTransaction.count = MSGSIZE;*  spiTransaction.txBuf = (void *)transmitBuffer;*  spiTransaction.rxBuf = (void *)receiveBuffer;**  transferOK = SPI_transfer(spi, &spiTransaction);*  if (!transferOK) {*      // Error in SPI or transfer already in progress.*      while (1);*  }*  @endcode

这里仅贴出了一下部分,具体请到对应的 .h 文件中查阅.

2.2 初始化与W5100S连接的接口

  1. 通过 SysConfig 工具配置使用到的SPI以及一些控制引脚的IO


    配置成功后,点击 FILE – Save 保存配置内容。

  2. 在 utility.h 文件中配置延时函数
    注释掉 utility.c 文件中配置STM32滴答定时器用来延时的函数,并在 utility.h 中使用宏定义定义延时函数

#include <unistd.h>
#define delay_s(time_s)     sleep(time_s)
#define delay_us(time_us)   usleep(time_us)
#define delay_ms(time_ms)   usleep((time_ms * 1000))
  1. 在 w5100s_config.c 文件中配置复位和中断管脚
/**
*@brief  初始化W5100s的复位与中断管脚
*@param  无
*@return 无
*/
void reset_break_gpio_init(void)
{/* 请确保再此之前以调用过一次 GPIO_init(); */GPIO_setConfig(CONFIG_GPIO_SPI_SLAVE_RST, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH);GPIO_setConfig(CONFIG_SPI_SLAVE_READY, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);GPIO_setCallback(CONFIG_SPI_SLAVE_READY, slaveReadyFxn);GPIO_enableInt(CONFIG_SPI_SLAVE_READY);
}/**
*@brief  W5100s复位设置函数
*@param  无
*@return 无
*/
void reset_w5100s(void)
{GPIO_write(CONFIG_GPIO_SPI_SLAVE_RST, 0);delay_ms(500);     //500msGPIO_write(CONFIG_GPIO_SPI_SLAVE_RST, 1);delay_s(1);           //1s
}
  1. 配置 SPI 的读写函数及片选函数
#include "bsp_hard_spi.h"static SPI_Handle  masterSpi;/* 初始化SPI */
void bsp_HardSpiInit(void)
{SPI_Params      spiParams;/* Open SPI as master (default) */SPI_Params_init(&spiParams);spiParams.frameFormat = SPI_POL1_PHA1;spiParams.bitRate = 4000000;masterSpi = SPI_open(CONFIG_SPI_MASTER, &spiParams);if (masterSpi == NULL){while (1);}else{}/* CS 引脚初始化 */GPIO_setConfig(CONFIG_GPIO_SPI_SLAVE_CS , GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH);
}/* 关闭SPI */
void bsp_HardSpiClose(void)
{SPI_close(masterSpi);
}/* 使用硬件SPI 发送一个字节 */
void bsp_HardSpi_SendByte(uint8_t byte)
{bool            transferOK;SPI_Transaction transaction;uint8_t recByte = 0;transaction.count = 1;transaction.txBuf = (void *) &byte;transaction.rxBuf = (void *) &recByte;/* Perform SPI transfer */transferOK = SPI_transfer(masterSpi, &transaction);if (transferOK) {}else {}
}/* 使用硬件SPI 读取一个字节 */
uint8_t bsp_HardSpi_ReadByte(void)
{bool            transferOK;SPI_Transaction transaction;uint8_t byte    = 0;uint8_t recByte = 0;transaction.count = 1;transaction.txBuf = (void *) &byte;transaction.rxBuf = (void *) &recByte;/* Perform SPI transfer */transferOK = SPI_transfer(masterSpi, &transaction);if (transferOK) {}else {}return recByte;
}/* 失能片选 */
void bsp_W5100sCS_High(void)
{GPIO_write(CONFIG_GPIO_SPI_SLAVE_CS, 1);
}/* 使能片选 */
void bsp_W5100sCS_Low(void)
{GPIO_write(CONFIG_GPIO_SPI_SLAVE_CS, 0);
}

2.3 测试工程主函数

void *masterThread(void *arg0)
{int32_t         status;
//    status = sem_init(&masterSem, 0, 0);
//    if (status != 0) {//        Display_printf(display, 0, 0, "Error creating masterSem\n");
//
//        while(1);
//    }bsp_HardSpiInit();//W5100S 初始化reset_break_gpio_init();reg_wizchip_spi_cbfunc(bsp_HardSpi_ReadByte,bsp_HardSpi_SendByte);          // SPI读写数据函数映射reg_wizchip_cs_cbfunc(bsp_W5100sCS_Low,bsp_W5100sCS_High);                        // SPI片选控制函数映射reset_w5100s();                       // W5100S硬件复位PHY_check();                          // 网线检测程序set_w5100s_mac();                     // 设置W5100SMAC地址set_w5100s_netinfo();                 // 设置W5100S网络参数sysinit(0x55,0x55);                   // 初始化4个Socket的发送接收缓存大小for(;;){do_tcp_client();                    // TCP 客户端数据回环测试}bsp_HardSpiClose();/* Example complete - set pins to a known state */GPIO_disableInt(CONFIG_SPI_SLAVE_READY);GPIO_setConfig(CONFIG_SPI_SLAVE_READY, GPIO_CFG_OUTPUT | GPIO_CFG_OUT_LOW);Display_printf(display, 0, 0, "\nDone");return (NULL);
}
  • 完整的工程下载,请点击 W5100S网卡的TCP-Client回环测试【资料中包含 STM32F103VET6 驱动 W5100S 的模板工程】,如果您没有积分可以留言,我单独发您。

PS:

  • 使用IAR搭建CC2652RB的开发环境
  • IAR FOR ARM 需要 8.50.9 及以上版本才能打开.
  • 需要先安装 CC2652RB 的 SDK,且需要安装在默认位置(C:\ti).

CC2652RB硬件SPI驱动W5100S网卡进行回环测试相关推荐

  1. STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片

    STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片 STM32基础工程生成 首先使用STM32CUBEMX生成STM32的基础工程,配置时钟到7 ...

  2. MSP430杂谈--AD7793硬件SPI驱动与模拟SPI驱动

    最近项目中用到了AD7793读取铂电阻值来得到相应的温度,编写了基于MSP430的硬件驱动程序和模拟驱动程序,并且能成功运行,现在记录一下分享给大家. AD7793硬件IIC驱动完整版下载链接:htt ...

  3. STM32使用硬件SPI驱动RC522门禁模块

    0.前言 RC522射频门禁识别模块非常常用,某宝卖家提供的程序基本都是使用软件模拟SPI的方式进行驱动的,但是实测使用软件模拟SPI识别速率.准确性没有硬件SPI驱动时高,因此本篇博客用于记录使用S ...

  4. 嵌入式开发-STM32硬件SPI驱动TFT屏

    嵌入式开发-STM32硬件SPI驱动TFT屏 这次用到的TFT屏 CubeMX设置 代码编写 增加的内容 需要注意问题 代码下载 这次用到的TFT屏 现在的TFT屏幕已经很便宜了,65536色屏幕,2 ...

  5. stm32硬件SPI驱动3线SPI-LCD的方法

    1.基本控制原理 三线SPI LCD, 顾名思义,最少只需要3个IO控制LCD显示,如果采用硬件控制上电时序和背光,最少只需要接SCK,CS,MOSI三个引脚即可控制LCD,并且不管接不接其他引脚,控 ...

  6. STM32F1硬件SPI驱动nRF24L01通过按键控制数据收发带状态反馈

    STM32F1硬件SPI驱动nRF24L01通过按键控制数据收发带状态反馈

  7. ESP8266+MicroPython开发:ESP8266使用硬件SPI驱动TFT屏幕(ST7735)

    由于上次模拟SPI驱动TFT屏幕太慢,所以,本次采用硬件SPI来进行驱动,但是,当我直接把对应SPI接口更换时,发现TFT屏幕驱动并没有因此得到好转,依然是非常的满,然后只能从对应花点铺色,显示字符串 ...

  8. 联盛德 HLK-W806 (十一): 软件SPI和硬件SPI驱动ST7567液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  9. STM32单片机基础17——使用硬件SPI驱动TFT-LCD(ST7789)

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与ST7789通信,驱动16bit TFT-LCD 屏幕. 0. 前言 学习 SPI 外设驱动LCD屏幕没有 ...

最新文章

  1. ADPRL - 近似动态规划和强化学习 - Note 5 - Banach Fixed Point Theorem in Dynamic Programming
  2. Hibernate架构概述
  3. php 分页 url重写 分页问题,解决千古难题,wordpress分页URL问题,wordpress给分页加链接...
  4. LeetCode 489. 扫地机器人(DFS)
  5. CCNA试验-NAT
  6. 多磁盘自动分区自动挂载脚本
  7. idea 安装 Vue 插件后没有新建Vue文件Vue component选项
  8. 400是什么错误_404、403、405、500 | 常见网页错误代码解析
  9. C向Python正确传递数组的代码
  10. ML--K-近邻算法
  11. win7时间同步出错的解决方法
  12. Audio Effect
  13. 三点共线判断方法分析
  14. 最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265))
  15. 201671030116宋菲菲 词频统计软件项目报告
  16. 化工原理计算机辅助设计,化工原理课程设计心得体会
  17. 小内存堆管理算法详细解析
  18. Oracle——表空间、用户、权限、角色
  19. 处理器架构——多发射处理器技术
  20. 10款最佳在线地图软件介绍

热门文章

  1. 系统缺少steam_api.dll解决方式
  2. Mac(Alfred) 办公提效工具
  3. 多路径配置udev_学习笔记:Linux多路径配置 multipath实现设备用户组绑定详细设置...
  4. 如何进行稳定性测试????
  5. 《战胜华尔街》读书笔记
  6. Opencv——立体成像几何
  7. java应用服务器运维的那些事
  8. input-获取文本框值
  9. Spring认证中国教育管理中心-Spring Data MongoDB教程五
  10. 基于Python高光谱遥感影像处理实例