查看: 2431|回复: 9

[求助] 帮忙看一下我的SPI读函数有问题么~~

[复制链接]

该用户从未签到

6

主题

36

帖子

0

注册会员

Rank: 2

积分
192
最后登录
2018-5-7
发表于 2015-7-15 22:15:20 | 显示全部楼层 |阅读模式
调试在K30上面调试W5500时总是接收到乱码。发现写函数没问题,可是每次读都错误。我往寄存器写数据之后硬件做出了相应的变化,但是读出来确实错误的寄存器数据。版主帮忙看看这一串的读函数有没有问题。【附上工程keil4.5            IAR FOR ARM】
另;:项目完成之后写一下K30的CAN,UART,SDHC,SLCD,按键等的学习过程和例程。如果spi解决的话再加上联调W5500的例程(K系列似乎没有过和W5500的联调教程。)
        offset=Read_W5500_SOCK_2Byte(s,Sn_TX_WR);          调用读函数
       
/*******************************************************************************
* 函数名  : Read_W5500_SOCK_2Byte
* 描述    : 读W5500指定端口寄存器的2个字节数据
* 输入    : s:端口号,reg:16位寄存器地址
* 输出    : 无
* 返回值  : 读取到寄存器的2个字节数据(16位)
* 说明    : 无
*******************************************************************************/
unsigned short Read_W5500_SOCK_2Byte(SOCKET s, unsigned short reg)
{
        INT16U i;

        SPI_CS_LOW();//置W5500的SCS为低电平
                       
        SPI1_Send_Short(reg);//通过SPI1写16位寄存器地址
        Send_Byte(FDM2|RWB_READ|(s*0x20+0x08));//通过SPI1写控制字节,2个字节数据长度,读数据,选择端口s的寄存器

//         i=Get_Byte();
        Send_Byte(0x00);//发送一个哑数据
        i=Get_Byte();//读取高位数据
        Send_Byte(0x00);//发送一个哑数据
        i*=256;
        i+=Get_Byte();//读取低位数据

        SPI_CS_HIGH();//置W5500的SCS为高电平
        return i;//返回读取到的寄存器数据
}



最后是Get_Byte函数


/*********************************************************************************************************
** Function name:           Get_Byte
** Descriptions:            SPI获取一个字节
** Returned value:          读取的数据           
*********************************************************************************************************/
INT32U  Get_Byte (void)
{
    INT32U ulTemp = 0;
    Send_Byte(0x00);                                                    /* 发送数据,以启动时钟         */   
    /*
     *  接收数据
     */       
    while (!(SPI0_SR & SPI_SR_RFDF_MASK)) {
    }
    ulTemp    = SPI0_POPR;
    SPI0_SR  |= SPI_SR_RFDF_MASK;   
    return ulTemp;                                                      /* 返回接收到的数据             */

}


我知道答案 目前已有9人回答

SPI_Master_W5500乱码.zip

1016.04 KB, 下载次数: 0, 下载积分: 威望 1

评分

参与人数 1NXP金币 +10 收起 理由
小七 + 10 打赏!

查看全部评分

回复

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-7-16 10:31:57 | 显示全部楼层
对的,FSL没有提供基于W5500芯片的例程,我建议你可以先参考一下一个经验分享中的SPI例程讲解(链接在后面),如果还不能发现问题所在,你可以通过逻辑分析仪抓取一下数据,看看问题出现在哪一步。

https://www.nxpic.org.cn/module/forum/thread-563081-1-1.html
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

36

帖子

0

注册会员

Rank: 2

积分
192
最后登录
2018-5-7
 楼主| 发表于 2015-7-16 11:22:17 | 显示全部楼层
FSL_TICS_ZP 发表于 2015-7-16 10:31
对的,FSL没有提供基于W5500芯片的例程,我建议你可以先参考一下一个经验分享中的SPI例程讲解(链接在后面 ...

我就是看着这个调的我的程序,可是读出来的寄存器的值总是不对啊~~
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-7-16 13:38:45 | 显示全部楼层
xiaomizhouzhou 发表于 2015-7-16 11:22
我就是看着这个调的我的程序,可是读出来的寄存器的值总是不对啊~~

又通过示波器或者逻辑分析仪抓过数据看过吗/
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

36

帖子

0

注册会员

Rank: 2

积分
192
最后登录
2018-5-7
 楼主| 发表于 2015-7-16 14:45:10 | 显示全部楼层
FSL_TICS_ZP 发表于 2015-7-16 13:38
又通过示波器或者逻辑分析仪抓过数据看过吗/

我用示波器看了各个信号线时钟线都正常。其他的要怎么看,用逻辑分析仪抓哪里的数据?
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-7-16 14:57:01 | 显示全部楼层
xiaomizhouzhou 发表于 2015-7-16 14:45
我用示波器看了各个信号线时钟线都正常。其他的要怎么看,用逻辑分析仪抓哪里的数据? ...

用逻辑分析仪抓出来数据可以看到具体的波形代表的是什么数值,然后你可以对照W5500的数据手册,看波形是否完全按照W5500数据手册要求的来
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

36

帖子

0

注册会员

Rank: 2

积分
192
最后登录
2018-5-7
 楼主| 发表于 2015-7-16 15:11:52 | 显示全部楼层
FSL_TICS_ZP 发表于 2015-7-16 14:57
用逻辑分析仪抓出来数据可以看到具体的波形代表的是什么数值,然后你可以对照W5500的数据手册,看波形是 ...

我找个逻辑分析仪去~~~
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

36

帖子

0

注册会员

Rank: 2

积分
192
最后登录
2018-5-7
 楼主| 发表于 2015-7-16 15:15:09 | 显示全部楼层
FSL_TICS_ZP 发表于 2015-7-16 14:57
用逻辑分析仪抓出来数据可以看到具体的波形代表的是什么数值,然后你可以对照W5500的数据手册,看波形是 ...

我去,这已经拐弯了~~我通过spi读出来的寄存器值是错误的,那就是读函数有问题。读函数如上,可是我看来看去都没问题啊。
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

36

帖子

0

注册会员

Rank: 2

积分
192
最后登录
2018-5-7
 楼主| 发表于 2015-7-17 11:34:08 | 显示全部楼层
FSL_TICS_ZP 发表于 2015-7-16 14:57
用逻辑分析仪抓出来数据可以看到具体的波形代表的是什么数值,然后你可以对照W5500的数据手册,看波形是 ...

我是直接用K40DZ10的模板改的,用在K30上不会有问题吧,液晶和串口都正常了。读函数我按照手册查了很多遍了,确实是没问题的。但W5500模块在stm32平台上面测试正常啊。真是乱了,两周都找不到问题~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-7-17 14:40:09 | 显示全部楼层
xiaomizhouzhou 发表于 2015-7-17 11:34
我是直接用K40DZ10的模板改的,用在K30上不会有问题吧,液晶和串口都正常了。读函数我按照手册查了很多遍 ...

我觉得不是代码错误的原因,而是时序步骤可能不完全符合W5500的要求,比如时钟频率,周期,采样,转换时钟模式选择不符等等,既然你有STM32的测试,你可以用逻辑分析仪抓取两者的读取数据,然后进行一下比较啊
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-28 02:18 , Processed in 0.112043 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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