查看: 5664|回复: 8

[讨论] SPI的NSS引脚配置与选择

[复制链接]

该用户从未签到

3

主题

14

帖子

0

注册会员

Rank: 2

积分
73
最后登录
2019-3-2
发表于 2018-11-5 15:25:28 | 显示全部楼层 |阅读模式
使用的SDK_2.4.1_LPC54114J256.zip里面的驱动。
配置SPI的时候需要选择指定的片选引脚,这里以主机做为例子,初始化时配置masterConfig.sselNum = (spi_ssel_t)FLASH_SPI_SSEL;
但是似乎只能配置一个SSEL引脚,在初始化的时候将其写入到fsl_spi.c下的配置参数g_configs[instance].sselNum中,在发送的时候,直接回调用g_configs[instance].sselNum这个参数。
这个有点疑问,这么做是不是就表示一路SPI就只能控制一路片选引脚了,如果一路SPI总线上挂载了多路SPI从设备,如何使用片选选择其他设备呢?
typedef enum _spi_ssel
{
    kSPI_Ssel0 = 0, /*!< Slave select 0 */
    kSPI_Ssel1 = 1, /*!< Slave select 1 */
    kSPI_Ssel2 = 2, /*!< Slave select 2 */
    kSPI_Ssel3 = 3, /*!< Slave select 3 */
} spi_ssel_t;
比如写在g_configs[instance].sselNum里写入了kSPI_Ssel0,但是在kSPI_Ssel1,kSPI_Ssel2,kSPI_Ssel3上都有挂载设备,如何给1,2,3进行通信呢?
回复

使用道具 举报

  • TA的每日心情
    擦汗
    昨天 22:51
  • 签到天数: 1847 天

    连续签到: 2 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112627
    最后登录
    2025-7-20
    发表于 2018-11-5 15:53:26 | 显示全部楼层
    如果SPI的设备共用了MISO和MOSI,那么任何时候微处理器都只能选择一个设备通讯,否则会出现数据紊乱。这种情况下你只能通过轮询方式,把不同设备的CS拉低,分别单独选择其他几个设备。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    14

    帖子

    0

    注册会员

    Rank: 2

    积分
    73
    最后登录
    2019-3-2
     楼主| 发表于 2018-11-5 16:43:44 | 显示全部楼层
    stm1024 发表于 2018-11-5 15:53
    如果SPI的设备共用了MISO和MOSI,那么任何时候微处理器都只能选择一个设备通讯,否则会出现数据紊乱。这种 ...

    这个了解的,现在的问题是SPI初始化的时候只能配置一路片选,而且发送数据的时候也是直接选择初始化的时候配置的片选,这样就导致了一路SPI只支持一个设备!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-31 22:07
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    20

    主题

    385

    帖子

    19

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2088
    最后登录
    2020-7-1
    发表于 2018-11-5 21:00:32 | 显示全部楼层
    你好,你现在的疑问是如果一条SPI总线上挂了四个设备,该如何选定指定的设备进行通信是吧?每次连接设备时,再给g_configs[instance].sselNum重新赋值就好了



    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    14

    帖子

    0

    注册会员

    Rank: 2

    积分
    73
    最后登录
    2019-3-2
     楼主| 发表于 2018-11-5 21:33:03 | 显示全部楼层
    1209实验室@ujn 发表于 2018-11-5 21:00
    你好,你现在的疑问是如果一条SPI总线上挂了四个设备,该如何选定指定的设备进行通信是吧?每次连接设备时 ...

    是的,谢谢啦。不过这个变量是个static类型的,得在在fsl_spi.c里面写一个改变sselNum的函数供外部调用。估计当时写驱动的时候没有考虑到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2019-11-30 20:45
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    2

    主题

    17

    帖子

    0

    注册会员

    Rank: 2

    积分
    100
    最后登录
    2020-2-14
    发表于 2018-11-17 16:19:34 | 显示全部楼层
    stm1024 发表于 2018-11-5 15:53
    如果SPI的设备共用了MISO和MOSI,那么任何时候微处理器都只能选择一个设备通讯,否则会出现数据紊乱。这种 ...

    SSEL0在初始化的时候就已经配置好了, 那如果还想用SSEL1 2 3 呢?  那是不是在发送的时候在配置一次??
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    昨天 22:51
  • 签到天数: 1847 天

    连续签到: 2 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112627
    最后登录
    2025-7-20
    发表于 2018-11-17 16:56:01 | 显示全部楼层
    May 发表于 2018-11-5 16:43
    这个了解的,现在的问题是SPI初始化的时候只能配置一路片选,而且发送数据的时候也是直接选择初始化的时 ...

    轮询的方式啊,分别把SSP0和SSP1、等的SSEL拉低不就行了?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    14

    帖子

    0

    注册会员

    Rank: 2

    积分
    73
    最后登录
    2019-3-2
     楼主| 发表于 2018-12-10 22:11:38 | 显示全部楼层
    stm1024 发表于 2018-11-17 16:56
    轮询的方式啊,分别把SSP0和SSP1、等的SSEL拉低不就行了?

    SDK里面在初始化的时候自己只能配置一个片选,如果要多路片选就需要自己实现函数做片选更换。我看SDK里面那种做法还以为使用硬件片选一路SPI支持支一个设备
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    14

    帖子

    0

    注册会员

    Rank: 2

    积分
    73
    最后登录
    2019-3-2
     楼主| 发表于 2018-12-10 22:13:16 | 显示全部楼层
    perdip 发表于 2018-11-17 16:19
    SSEL0在初始化的时候就已经配置好了, 那如果还想用SSEL1 2 3 呢?  那是不是在发送的时候在配置一次?? ...

    是的,只用配置片选就行了,自己写个函数修改SDK中spi驱动的片选就可以了。感觉SDK设计的时候是不是没考虑这个
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 03:01 , Processed in 0.101798 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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