一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

接口SPI外设到MAX7651处理器

来源:analog 发布时间:2023-11-15

摘要: 本文解释了如何将GPIO端口连接到SPI外设。它定义了SPI协议的基础,信号和SCK信号的四种传输变化。利用MAX7651闪存可编程12位集成数据采集系统实现SPI接口的软件程序。

SPI 总线是许多微处理器外设芯片使用的4线串行通信接口。MAX7651微处理器不包括专用硬件来实现接口。然而,简单的软件例程显示可以发送和接收数据到SPI外设。

SPI接口的4个引脚如下:

  • SCK(串行数据时钟):数据在SCK的上升沿或下降沿上移位/锁存(见下一节)。

  • MOSI(主输出/从输入):如果芯片是主人,数据从这个大头针传输,如果芯片是奴隶,则进入这个大头针。

  • MISO(主输入/从输出):如果芯片是一个主人,数据被接收到这个大头针,如果芯片是一个奴隶,从这个大头针传送出去。

  • active - low CS (Chip Select, active low):告诉外围设备传输即将开始。


SPI协议根据数据定义了四种SCK相位和极性的组合。如果一个芯片有控制位来设置这四种状态,它们通常被称为CPOL(时钟极性)和CPHA(时钟相位)。SPI总是以8位块传输数据。您可以传输任意数量的8位块。例如,一个16位写断言Active-Low CS从前8位开始直到第16位结束。

表1 四变奏
CPOLCPHA转移
00SCK上升沿转移。
SCK在位定时中间转换。
10SCK降边转移。
SCK在位定时中间转换。
01SCK降边转移。
位计时开始时的SCK转换。
11SCK上升沿转移。
位计时开始时的SCK转换。

当查看SPI外设的数据表时,通常会看到对SPI模式的引用为CPOL = 0, CPHA = 0等,即使芯片本身物理上不包含这些位定义。相反,SPI接口是“硬连接”来发送/接收数据的,就好像CPOL和CPHA位被设置为0一样。例如,MAX5154 12位DAC使用具有上升中位数据传输的SPI接口。这对应于CPOL = 0, CPHA = 0协议。因为这是迄今为止最常见的SPI传输,所以这就是我们将要讨论的示例代码。请看下面的图表,这是来自MAX5154数据表。信号Active-Low CS是SPI信号Active-Low SS, SCLK是SCK, DIN将连接到MODI,因为外设是Slave,只有输入(无回读)。这部分在传输中使用16位。


图1所示 串行接口时序图。

代码示例:8-Bit Data Transfer

下面的示例是最常见的SPI传输类型,CPO = 0, CPHA = 0。例程不假设MAX7651的时钟速度,因为I/O端口位只是尽可能快地“敲位”。数据传输时间显示在本节的末尾。

图2显示了MAX7651/ MAX7652与SPI外设之间的典型连接。


图2 通用SPI连接。

注释字段中的数字{N}是执行该指令所需的时钟周期数。

;用于8位外设的SPI数据传输。MAX7651是主控;外设为Slave。

;使用以下spi定义的引脚。(有些外设是只写的,所以只需要3根电线。)
;SCK:数据传输时钟
;MISO:主输入数据(来自外设),并不总是使用
;MOSI:主输出数据(到外围设备)
;SS:奴隶选择(激活低)

SCK装备的P1.0
味噌装备的P1.1
莫西人装备的P1.2
CS装备的P1.3;使用端口1,但这是100%任意的。使用任何可用的引脚。


;现在我们需要使用MAX7651中的一些内部RAM作为数据存储。
;为了提高执行速度,这些变量中的两个必须位于RAM区域
;这允许在字节内进行位寻址。在MAX7651中,RAM空间对应
;地址20H至2FH。低于20H或高于2FH的地址不能被位寻址!

SPI_In装备的20 h;从Slave读取8位的结果。
SPI_Out装备的21小时;我们希望发送到Slave的数据。


;最后,我们需要一个循环计数器来跟踪发送8位。
;这可以是'R'寄存器(R0-R7)或
;任何RAM寄存器(不必是位可寻址的)。让我们使用RAM
;登记。

循环装备的30 h;可以在地图上的任何地方;这只是一个例子。


;假设调用时,芯片选择位SS已经设置为1。

SPI_IO:CLRSCK;SCK开始时很低。{1}

CLRCS;清除CS后开始数据传输。{1}

SETB味噌;要用作输入,必须在内部设置。{1}

MOV循环,# 8;8位要传输。{3}
传递:MOVC, SPI_Out.7;将第7位移动到进位(SPI首先是MSB)。{2}

MOV莫西人,C;I/O端口反映进位,这是数据位。{2}

SETBSCK;数据稳定后,生成SCK上升沿。{1}

MOVC,味噌;从Slave读取数据到Carry(可选)。{2}

MOVSPI_In.7 C;复制到接收到的数据字节,第7位。{2}

CLRSCK;数据读入后产生SCK下降沿。{1}

MOV, SPI_Out;累加器是移位操作的临时容器。{2}

RL一个;向左旋转(但不是通过Carry!){1}

MOVSPI_Out,;准备第7位,以便下一次传输到Slave。{2}

MOV, SPI_In;获取以前的Slave读取数据。{2}

RL一个;向左旋转以使下一个位位置进入适当的位置。{1}

MOVSPI_In,;保存结果。{2}

DJNZ循环,传递;递减循环。如果不是零跳到XFER。{3}
;传输完成。

SETBCS;取消断言芯片选择。{1}

.END
;告诉汇编程序代码完成。

将8位(包括读和写)传输到Slave的总CPU周期为6 + 8 × 23 + 1 = 191。对于只读或只读,总共是6 + 8 × 18 + 1 = 151个CPU周期。下表显示了使用常见MAX7651时钟速度的各种传输速率。

表2 转移率
MAX7651时钟速率比特传输时间总读/写
传输时间
12 mhz7.95美国(~ 125 khz)63.6我们
11.0592兆赫8.63美国(~ 116 khz)69.08我们
4兆赫23.88美国(~ 41.9 khz)191年美国

从这个表中,我们可以看到最快的SPI字节传输大约是15.7KHz,而最慢的速率是5.2KHz。这比专用的1MHz SPI硬件端口慢得多!因此,如果MAX7651要用作Slave,那么SPI Master必须设置为最慢的比特传输速度(125KHz),并且MAX7651必须在12MHz时钟速度下工作。



声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: