查看: 2423|回复: 9

[求助] KL02SPI通信不正常

[复制链接]

该用户从未签到

5

主题

22

帖子

0

注册会员

Rank: 2

积分
95
最后登录
2015-8-7
发表于 2015-4-2 17:46:44 | 显示全部楼层 |阅读模式
我用了KL02的开发板用来驱动一个射频模块,进行SPI通信的时候,我只是用来读取模块的版本号,但是每次我都看到有发送数据出去,但是没有数据收到,也就是读不到版本号?
void SPI_Init(void)
{
  SIM_SCGC4|=SIM_SCGC4_SPI0_MASK;//打开SPI时钟
  SIM_SCGC5|=SIM_SCGC5_PORTB_MASK|SIM_SCGC5_PORTA_MASK;//打开IO口

  PORTA_PCR5|=PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;//选择SPI复用功能
  PORTA_PCR6|=PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;
  PORTA_PCR7|=PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;
  PORTB_PCR0|=PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;

  SPI0_C1 &=~SPI_C1_SPE_MASK;//禁止SPI
  SPI0_C1 &=~SPI_C1_CPHA_MASK;
  SPI0_C1 |=SPI_C1_MSTR_MASK;//选择主模式
  SPI0_BR |=SPI_BR_SPPR(0x2);
  SPI0_C1 |=SPI_C1_SPE_MASK;//使能SPI
}


unsigned char SpiInOut( unsigned char TXdata)
{
    while((SPI0_S & SPI_S_SPTEF_MASK) == 0);
    SPI0_D =TXdata;
    while((SPI0_S & SPI_S_SPRF_MASK)==0);
    return((uint8)SPI0_D);   
}
//---------------------------------------------------------------------------//

void SPI_Write( uint8_t addr, uint8_t data )
{
    SPI_WriteBuffer( addr, &data, 1 );
}

void SPI_Read( uint8_t addr, uint8_t *data )
{
    SPI_ReadBuffer( addr, data, 1 );

}

void SPI_WriteBuffer( uint8_t addr, uint8_t *buffer, uint8_t size )
{
    uint8_t i;
    NSS_0;
    SpiInOut(addr|0x80);
    for ( i = 0; i < size; i++ )
    {
        SpiInOut( buffer[i] );
    }
    NSS_1;
}

void SPI_ReadBuffer( uint8_t addr, uint8_t *buffer, uint8_t size )
{
    uint8_t i;
    NSS_0;
    SpiInOut( addr & 0x7F );
    for ( i = 0; i < size; i++ )
    {
        buffer[i] = SpiInOut(0x00);
    }
    NSS_1;
}

void SPI_WriteFifo( uint8_t *buffer, uint8_t size )
{
    SPI_WriteBuffer( 0, buffer, size );
}

void SPI_ReadFifo( uint8_t *buffer, uint8_t size )
{
    SPI_ReadBuffer( 0, buffer, size );
}

void main (void)
{
        //char ch;
        SPI_Init();
          printf("\nRunning the spi_test project.\n");
        SPI_Read(0x42,&Sx1276VerNO);

        while(1)
        {
                SPI_Read(0x42,&Sx1276VerNO);
        }
}

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

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-4-3 10:26:02 | 显示全部楼层
你想跟你确认一点,你上面提供的write,read功能的代码有在别工程内使用过和正确吗?
我觉得你收不到数据还有可能你没有遵照此射频模块的通信协议。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-4-3 11:22:33 | 显示全部楼层
    IO口没有进行初始化,示波器看一下SPI是否有数据在传输.
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    22

    帖子

    0

    注册会员

    Rank: 2

    积分
    95
    最后登录
    2015-8-7
     楼主| 发表于 2015-4-7 10:41:40 | 显示全部楼层
    FSL_TICS_ZP 发表于 2015-4-3 10:26
    你想跟你确认一点,你上面提供的write,read功能的代码有在别工程内使用过和正确吗?
    我觉得你收不到数据还 ...

    这个代码是在stm8上使用过了,也是可以正常通信的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    22

    帖子

    0

    注册会员

    Rank: 2

    积分
    95
    最后登录
    2015-8-7
     楼主| 发表于 2015-4-7 11:48:19 | 显示全部楼层
    安 发表于 2015-4-3 11:22
    IO口没有进行初始化,示波器看一下SPI是否有数据在传输.

    我选择了SPI复用,还需要初始化IO口吗,难道不是直接配置成SPI的IO口配置吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2015-4-7 13:30:00 | 显示全部楼层
    醉惜梦 发表于 2015-4-7 11:48
    我选择了SPI复用,还需要初始化IO口吗,难道不是直接配置成SPI的IO口配置吗 ...

    我建议你参考此经验分享,重新配置SPI的发送,介绍函数吧。https://www.nxpic.org.cn/module/forum/thread-595989-1-1.html
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    22

    帖子

    0

    注册会员

    Rank: 2

    积分
    95
    最后登录
    2015-8-7
     楼主| 发表于 2015-4-7 15:19:52 | 显示全部楼层
    FSL_TICS_ZP 发表于 2015-4-7 13:30
    我建议你参考此经验分享,重新配置SPI的发送,介绍函数吧。https://www.nxpic.org.cn/module/forum/thr ...

    我刚刚把NSS的IO口复用换成一般IO口,然后通信正常了,
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-4-7 15:51:43 | 显示全部楼层
    醉惜梦 发表于 2015-4-7 15:19
    我刚刚把NSS的IO口复用换成一般IO口,然后通信正常了,

    有的时候,是和外面的的SPI从机的CS片选时序有关,所以硬件SPI的CS不行,是可以通过这种把CS的引脚换成IO控制就好了,这点在外部flashSPI控制上也是的,需要CS为IO口控制高低。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    22

    帖子

    0

    注册会员

    Rank: 2

    积分
    95
    最后登录
    2015-8-7
     楼主| 发表于 2015-4-7 16:02:32 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-4-7 15:51
    有的时候,是和外面的的SPI从机的CS片选时序有关,所以硬件SPI的CS不行,是可以通过这种把CS的引脚换成IO ...

    好的 ,谢谢大家的解答,明白了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2015-5-13 16:31:18 | 显示全部楼层
    非常感谢你关于Kinetis的技术问题。如果你没有其他问题,我们将此帖默认为已解决.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 21:28 , Processed in 0.108535 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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