查看: 5918|回复: 5

[原创] LPC:SPI片选信号配置方法

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20028
最后登录
2024-4-26
发表于 2022-3-28 16:40:00 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2022-3-28 17:06 编辑

LPCSPI片选信号配置方法
    SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速全双工同步通信总线。在MCUXPresso SDK路径driver_examples/spi 里可以找到很多关于SPI的演示例程。但是这些SPI的demo全部是点对点通信,也就是说一个主机对一个从机,不少客户询问一对多的实现方法,即主机通过片选信号与多个SPI从设备通信。故本文在浅析SPI的基础上,提供了一种基于SDK的SPI片选信号配置方法,方便大家学习借鉴。方法在LPC55 LPC54 等LPC上均适用。

1.  LPC SPI简介
SPI通信以主从方式工作,通常有一个主设备和一个或多个从设备。
-SCK:时钟信号,由主设备产生
-MOSI: 主设备数据输出,从设备数据输入
-MISO: 主设备数据输入,从设备数据输出
-SSEL: 从设备使能信号,由主设备控制

LPC使用者手册中SPI框图如下:
SPI block diagram.jpg
    SPI内部工作原理为:
-主机发送数据:设置为SPI模式的Flexcomm接口将FIFO数据传入Tx寄存器,再由其通过MOSI发送。
-主机接收数据:从机将数据通过MISO传入主机Rx寄存器,再由设置为SPI模式的Flexcomm接口接收。

    需要重点注意的是:根据使用者手册,在SPI通讯中,片选信号最多设置为4个
    以LPC55S69为例:在LPC55S69中Flexcomm2、Flexcomm3、Flexcomm4有四个片选信号,但Flexcomm1、Flexcomm5、Flexcomm7等仅有两个片选信号,所以在选择片选信号数量时需根据具体接口进行合理选择。

    其外部工作框图形式可简化为:
external structure.jpg
    在SPI通讯中SCK、MOSI、MISO为公用数据线,连接每一个外围器件,数据传输由每个从机的片选信号SSEL决定。
2.  片选信号配置方法
    下面以SDK LPCXpresso55S69 spi_polling_b2b_transfer_masterdemo为例,在原有demo的SPI数据发送基础上增加对片选的控制。添加SSEL0片选信号。
     过程需两步便可实现。

① 步骤一:利用pin引脚配置工具添加使能SSEL0。
    打开Pin引脚配置工具,选择Pin 30引脚,点击FLEXCOMM7:CTS_SDA_SSEL0,此时Routing Details出现红框区域部分。点击更新代码。
Pin config tool.jpg
    更新后Pin_mux.c文件中代码更新部分如下图。
Pin_mux.jpg
② 步骤二:将FIFOWR寄存器相应片选位使能。
FIFOWR.jpg
    以下实现方法可供用户参考:
    在fsl_spi.c文件中添加SPI_MasterTransferBlocking_ssel函数。
    该函数在SPI_MasterTransferBlocking函数基础上仅增加片选值以及利用位操作将片选位使能。高亮为改动部分:
code.jpg
    修改后的fsl_spi.c文件以及fsl_spi.h文件见附件,供参考。
    最后,在程序中直接调用SPI_MasterTransferBlocking_ssel(EXAMPLE,SPI_MASTER,&xfer,sselNum);即可通过参数sselNum来选择片选0。
main.jpg
    在进行片选信号的改动时只需将红圈内的数字改为相应的片选数字(本例程为0)即可。

小结:
    本文中改变片选信号的思路为:利用Pin引脚配置工具添加片选使能引脚,之后将管理片选信号的寄存器通过位操作使能。
    客户在进行更改片选信号时只需先使能引脚,之后将程序中片选数字更改,重新编译即可。

fsl_spi.c and fsl_spi.h.zip

13.19 KB, 下载次数: 19, 下载积分: 威望 1

回复

使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2022-3-28 17:47:50 | 显示全部楼层
    我觉得这个片选信号的主要用途还是在对等传输的机制下。
    在这种一主多从的机制下,直接使用GPIO就可以了。
    只要数据线推得动,没有必要限制是2个,还是4个!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20028
    最后登录
    2024-4-26
     楼主| 发表于 2022-3-29 16:09:47 | 显示全部楼层
    jobszheng5 发表于 2022-3-28 17:47
    我觉得这个片选信号的主要用途还是在对等传输的机制下。
    在这种一主多从的机制下,直接使用GPIO就可以了。
    ...

    的确IO口也可以实现片选。
    但如果只挂低于4个slave,仍建议用SPI模块自己的SSEL。某个SSEL一旦使能,它的信号时序是受SPI模块自身控制的,例如,在SPI没有数据传输的时候,SSEL是可以自动挂起的。这一点IO是做不到的,所有操作要人工控制
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2022-3-29 17:57:54 | 显示全部楼层
    好的,谢谢小恩GG
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20028
    最后登录
    2024-4-26
     楼主| 发表于 2022-3-30 12:53:06 | 显示全部楼层
    jobszheng5 发表于 2022-3-29 17:57
    好的,谢谢小恩GG

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    13 小时前
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    1

    主题

    12

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    286
    最后登录
    2024-4-26
    发表于 2023-1-29 17:17:56 | 显示全部楼层
    本帖最后由 eefocus_3864499 于 2023-1-31 09:07 编辑

    mimxtr106x怎么改片选还是直接用gpio?
    打卡打卡!今天天气不好!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-26 22:52 , Processed in 0.145396 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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