野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10839|回复: 2

关于移植W5500模块程序问题

[复制链接]
发表于 2016-3-7 10:38:40 | 显示全部楼层 |阅读模式
感谢大家
我利用咱们野火W5500开发模块,程序我现在将STM32的TCPS程序,修改成IAP15w4k61单片机的连接程序,我测试了下,但是有时是好的,有时回来的是乱码,我已经不知道去哪找问题了。大家帮我分下吧,一些关键的程序部分我一点没有修改,只是修改了SPI通讯部分



我想下面修改应该是对的吧,不然也不会时好时坏吧
/*
**************************************************************************************************
* @file      w5500_conf.c
* @author    WIZnet Software Team
* @version   V1.0
* @date      2015-02-14
* @brief    配置MCU,移植W5500程序需要修改的文件,配置W5500的MAC和IP地址
**************************************************************************************************
*/
#include <stdio.h>
#include <string.h>

#include"w5500_conf.h"
#include"w5500.h"
#include"spi.h"

/**
*@brief  写入一个8位数据到W5500
*@param  addrbsb: 写入数据的地址
*@param   data:写入的8位数据
*@return
*/
void IINCHIP_WRITE( uint32 addrbsb,  uint8 dataa)
{
   WIZ_SCS=0;//置W5500的SCS为低电平                                
   SPI_Send_Byte( (addrbsb & 0x00FF0000)>>16);// 写入地址段高8位Address byte 1
   SPI_Send_Byte( (addrbsb & 0x0000FF00)>> 8);// 写入地址段低8位Address byte 2  
   SPI_Send_Byte( (addrbsb & 0x000000F8) + 4);//以写模式写入控制段
   SPI_Send_Byte(dataa);                  
   WIZ_SCS=1; //置W5500的SCS为高电平                           
}

/**
*@brief  从W5500读出一个8位数据
*@param  addrbsb: 写入数据的地址
*@param   data:从写入的地址处读取到的8位数据
*@return
*/
uint8 IINCHIP_READ(uint32 addrbsb)
{
   uint8 dataa = 0;
   WIZ_SCS=0;//置W5500的SCS为低电平                          
   SPI_Send_Byte( (addrbsb & 0x00FF0000)>>16);// 写入地址段高8位Address byte 1
   SPI_Send_Byte( (addrbsb & 0x0000FF00)>> 8);// 写入地址段低8位Address byte 2
   SPI_Send_Byte( (addrbsb & 0x000000F8))    ;//以读模式写入控制段
   dataa = SPI_Read_Byte(); // 写入数据段
   /*SPI主从接口相当于一个循环串行移位寄存器,
   主机(STM32)发送数据 0×00,从机(W5500)就会接手0×00,
   并移数据到主机当中,该函数返回值就是读的数据*/
   WIZ_SCS=1; //置W5500的SCS为高电平                              
   return dataa;   
}

/**
*@brief  向W5500写入len字节数据
*@param  addrbsb: 写入数据的地址
*@param   buf:写入字符串
*@param   len:字符串长度
*@return len:返回字符串长度
*/
uint16 wiz_write_buf(uint32 addrbsb,uint8* buf,uint16 len)
{
   uint16 idx = 0;
   WIZ_SCS=0;//置W5500的SCS为低电平                              
   SPI_Send_Byte( (addrbsb & 0x00FF0000)>>16);
   SPI_Send_Byte( (addrbsb & 0x0000FF00)>> 8);
   SPI_Send_Byte( (addrbsb & 0x000000F8) + 4);
   for(idx = 0; idx < len; idx++)
   {
     SPI_Send_Byte(buf[idx]);
   }
   WIZ_SCS=1; //置W5500的SCS为高电平                           
   return len;  
}

/**
*@brief  从W5500读出len字节数据
*@param  addrbsb: 读取数据的地址
*@param  buf:存放读取数据
*@param  len:字符串长度
*@return len:返回字符串长度
*/
uint16 wiz_read_buf(uint32 addrbsb, uint8* buf,uint16 len)
{
  uint16 idx = 0;
  WIZ_SCS=0;//置W5500的SCS为低电平                              
  SPI_Send_Byte( (addrbsb & 0x00FF0000)>>16);
  SPI_Send_Byte( (addrbsb & 0x0000FF00)>> 8);
  SPI_Send_Byte( (addrbsb & 0x000000F8));   
  for(idx = 0; idx < len; idx++)                  
  {
    buf[idx] = SPI_Read_Byte();
  }
  WIZ_SCS=1; //置W5500的SCS为高电平                                 
  return len;
}

利用wireshark抓包出现个IPA,搞不懂这是什么



我以没办法找出问题,特来请教各位。谢谢啦

乱码现象

乱码现象
QQ图片20160307103447.png
17.jpg
回复

使用道具 举报

发表于 2016-3-7 11:00:50 | 显示全部楼层
移植的时候,最主要就是确保各个接口一致,如引脚、延时、buff大小
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-7 16:20:32 | 显示全部楼层
flyleaf 发表于 2016-3-7 11:00
移植的时候,最主要就是确保各个接口一致,如引脚、延时、buff大小

火哥,1 你说的引脚意思是W5500与单片机连接硬件通讯引脚?
          2 buff大小程序中每个设置了2kB,你说的一致是哪个意思?
          3 程序中这种uint32之类的还需要修改么
现在要么发一段时间后就出现乱码,难道是收发缓存大小问题?要么一开始发送回来的就是乱码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-1 07:23 , Processed in 0.029858 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表