查看: 7460|回复: 12

[其他] 求助 SPI通信的问题

[复制链接]

该用户从未签到

2

主题

14

帖子

0

新手上路

Rank: 1

积分
19
最后登录
1970-1-1
发表于 2012-2-7 15:11:41 | 显示全部楼层 |阅读模式
我用的是MC9S08QE128 两片单片机SPI通信  从机是用PE生成的程序  不知道怎么添加从机的发送程序 现在什么都不加的话 从机可以正常接收主机的数据  但是从机给主机的发送总是出错  哪位大神用过  能否给个例子程序 
我知道答案 目前已有12人回答
回复

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-2-7 16:42:22 | 显示全部楼层

    RE:求助 SPI通信的问题

    解决办法,既然你的主机可以给从机发信息,说明你的程序可以运行。在主机通讯完毕以后,从机需要发送信息到主机的时候,这个时候需要把从机变为主机,在发送完毕以后再恢复为从机就可以了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    19
    最后登录
    1970-1-1
     楼主| 发表于 2012-2-8 10:39:50 | 显示全部楼层

    回复:求助 SPI通信的问题

    回复第 2 楼 于2012-02-07 08:42:22发表:
    解决办法,既然你的主机可以给从机发信息,说明你的程序可以运行。在主机通讯完毕以后,从机需要发送信息到主机的时候,这个时候需要把从机变为主机,在发送完毕以后再恢复为从机就可以了。 

    必须要进行主从交换吗?因为我的从机代码是PE生成的  主从关系已经定了   可不可以主机发送无用的数据来换取从机需要发送的数据?但是这样就出错  PE提供了一个从机的发送缓冲数组  但是我一旦往这个数组里放数据  就出现接收缺失了  收不到主机完整的数据 这样从机的数据也就不能正确地发到主机了 
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    19
    最后登录
    1970-1-1
     楼主| 发表于 2012-2-8 16:23:50 | 显示全部楼层

    回复:求助 SPI通信的问题

    回复第 2 楼 于2012-02-07 08:42:22发表:
    解决办法,既然你的主机可以给从机发信息,说明你的程序可以运行。在主机通讯完毕以后,从机需要发送信息到主机的时候,这个时候需要把从机变为主机,在发送完毕以后再恢复为从机就可以了。 

    附件是从机的工程 基本全是PE生成的 我就添加了从接受缓冲区取出数据 和 写入发送缓冲的两点
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    19
    最后登录
    1970-1-1
     楼主| 发表于 2012-2-8 16:25:20 | 显示全部楼层

    回复:求助 SPI通信的问题

    回复第 2 楼 于2012-02-07 08:42:22发表:
    解决办法,既然你的主机可以给从机发信息,说明你的程序可以运行。在主机通讯完毕以后,从机需要发送信息到主机的时候,这个时候需要把从机变为主机,在发送完毕以后再恢复为从机就可以了。 

    不好意思 刚没有上传上

    从机程序.zip

    358.1 KB, 下载次数: 41

    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-2-8 16:41:37 | 显示全部楼层

    RE:求助 SPI通信的问题

    ISR(SS1_Interrupt)这个函数里面,你发送的时候注意,上面if(SS1_InpLen < SS1_INP_BUF_SIZE)的处理,你应该加个数据处理,判断一下发送的时候,就不要先去读取了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    19
    最后登录
    1970-1-1
     楼主| 发表于 2012-2-8 16:53:54 | 显示全部楼层

    回复:求助 SPI通信的问题

    回复第 6 楼 于2012-02-08 08:41:37发表:
    ISR(SS1_Interrupt)这个函数里面,你发送的时候注意,上面if(SS1_InpLen < SS1_INP_BUF_SIZE)的处理,你应该加个数据处理,判断一下发送的时候,就不要先去读取了。
     

    恩 我从接收缓冲提取的函数就是加到这儿了 我觉得现在问题是我向发送缓冲数组里写数据影响了接收 但是我从机发送数据时候主机是必须要发送数据来交换的  我就是不知道为什么会影响?你觉得呢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    19
    最后登录
    1970-1-1
     楼主| 发表于 2012-2-8 17:01:24 | 显示全部楼层

    回复:求助 SPI通信的问题

    回复第 7 楼 于2012-02-08 08:53:54发表:
    回复第 6 楼 于2012-02-08 08:41:37发表:
    ISR(SS1_Interrupt)这个函数里面,你发送的时候注意,上面if(SS1_InpLen < SS1_INP_BUF_SIZE)的处理,你应该加个数据处理,判断一下发送的时候,就不要先去读取了。
     

    恩 我从接收缓冲提取的函数就是加到这儿了 我觉得现在问题是我向发送缓冲数组里写数据影响了接收 但是我从机发送数据时候主机是必须要发送数据来交换的  我就是不知道为什么会影响?你觉得呢
     

    如果不加从机发送的那一句  从机接收是正常的  但是从机的发送不是伴随着接收必须都要进行的吗  还是我理解有误  我是新手  刚接触SPI
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-2-9 09:17:24 | 显示全部楼层

    RE:求助 SPI通信的问题

    你加上判断,SPI接收中断标志位为1,这个时候再去接收,而不是发生中断就去接收。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    16

    帖子

    0

    新手上路

    Rank: 1

    积分
    16
    最后登录
    1970-1-1
    发表于 2013-5-24 15:36:51 | 显示全部楼层

    RE:求助 SPI通信的问题

    不一定需要主从交换。
    不过spi做slave不应该主动发数据给master。
    spi slave的clock和数据收发都是由master控制的。
    slave只能由master首先发起传输后,把数据发回给master。
    这就对spi主从有几个要求:
    1. spi slave的采样率要高过master,也就是master要跑的比slave慢,避免出现master发起传输后,slave端数据还没有准备好。
    2. 需要有个sync信号,一般是一个byte的command,作为主从数据交换的开始信号。
    3. master要避免SS一直拉低,SS一直拉低有时候会导致slave端FIFO下溢(underflow).
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-26 03:46 , Processed in 0.111126 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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