口袋实验室--使用 AD2 高效调试 SPI 接口

目录

1. 简介

2. SPI Protocol 模块配置

3. 操作步骤

3.1 打开 WaveForm 软件

3.2 启动功能模块

3.3 启用 Logic Analyzer

3.4 编写 Script

3.5 SPI 相关函数

4. 总结


1. 简介

SPI 接口复习

它具有以下几个特点:

  • 全双工通信:SPI 允许数据在主设备和从设备之间同时传输。
  • 主从模式:SPI 通信系统中有一个主设备(Master)和一个或多个从设备(Slave)。主设备控制时钟信号,并发起通信。
  • 四线接口:典型的 SPI 接口使用四条信号线:
    • SCLK(串行时钟):由主设备生成的时钟信号。
    • MOSI(主输出从输入):主设备发送数据,从设备接收数据。
    • MISO(主输入从输出):从设备发送数据,主设备接收数据。
    • CS(片选):用于选择特定的从设备,通常是低电平有效。
  • 速率:SPI 支持较高的通信速率,通常可以达到几十 Mbps。

Analog Discovery 2 的 Protocol-SPI 模块简介

  • 可以用于监测数据传输,或者作为协议主控制器。
  • 支持单、双、四模式发送和接收数据。
  • 选择信号是由 WaveForm 软件进行激活,因此它与位串行化没有精确的时间同步。
  • 缓冲区大小:Patterns 缓冲区大小为 1k 或 16k 位,Logic 缓冲区大小为 4k 或 16k 位。
  • 大数据传输:当传输的数据量超过自定义的 Patterns 或 Logic Analyzer 设备缓冲区时,会将其分割成多个传输。

Patterns 缓冲区:用于存储生成数字信号的缓冲区。它用于模式发生器(Pattern Generator),可以生成复杂的数字信号序列。Patterns 缓冲区的大小为 1k 或 16k 位。

Logic 缓冲区:这是用于存储逻辑分析器捕获的数字信号数据的缓冲区。逻辑分析器(Logic Analyzer)用于捕获和分析数字信号,Logic 缓冲区的大小为 4k 或 16k 位。

这些缓冲区的大小决定了设备在一次传输或捕获过程中可以处理的数据量。如果传输的数据量超过缓冲区大小,数据会被分割成多个传输或捕获操作。

 

2. SPI Protocol 模块配置

SPI 模块设置(信号线设置)

  • 片选(Select):指定片选信号,并指定有效电平(Active)是低或高。
  • 时钟(Clock):指定时钟信号。
  • DQ0:指定数据信号 MOSI。
  • DQ1:指定数据信号 MISO。
  • DQ2/DQ3:在四线 SPI 模式中使用。

SPI 模块设置(物理协议)

  • 极性(Polarity):选择极性。
  • 相位(Phase):选择相位。
  • 频率(Frequency):指定时钟信号频率。

SPI 模块设置(传输顺序)

  • 首位(First bit):选择位传输顺序,最高或最低有效位先传输。
  • 首字(First word):选择字传输顺序,最高或最低有效字先传输。

SPI 模块额外设置(齿轮菜单)

  • 格式:在二进制、十进制、十六进制和ASCII之间选择数据表示。
  • FreqFilter:启用接收频率滤波器,以消除时钟信号上的故障。指定的频率用于过滤10%的故障,例如100kHz脉冲短于1微秒将被忽略。
  • 初始DQ#:选择数据信号的初始驱动状态(高电平、低电平、高阻态)。

SPI Master 配置

  • 模式(Mode),选择传输模式,包括:
    • Read Write,典型四线全双工读写(DQ0-1)
    • Read,四线单读(From DQ1)
    • Write,四线单写(To DQ0)
    • Read0,四线单读(From DQ0)
    • Dual Write,双数据线写(To DQ0-1)
    • Dual Read,双数据线读(From DQ0-1)
    • Quad Write,四数据线写(To  DQ0-3)
    • Quad Read,四数据线读(From DQ0-3)
  • 命令位(Command bits):指定命令比特位宽。
  • 命令(Command):指定命令字,将在每个读取或写入操作之前通过 DQ0 发送。
  • 字位(Word bits):指定数据的比特位宽,通常一个数据位宽是 8 bits。
  • 字数(Words):显示要写入的字数或指定要读取的字数。
  • 写入:以二进制、十进制或十六进制格式指定要发送的字。数据可以通过打开按钮从二进制或文本文件导入。例如:“1 2 h34 b01010110”
  • 读取:显示读取的字。数据可以通过保存或追加按钮保存到二进制或文本文件中。

3. 操作步骤

3.1 打开 WaveForm 软件

首先连接 AD2 至 PC,然后打开 WaveForm 软件,通过右下角可以查看连接状态,软件会显示设备序列号。

3.2 启动功能模块

需要启动 Protocol 和 Script 两个模块。

Protocol 模块

使用界面进行配置。因为在 GUI 中完成的操作更容易进行。

协议接口利用设备的数字模式生成器和逻辑分析仪资源来使用UART、SPI、I2C、CAN协议传输数据,并对AVR微控制器进行编程。

Script 模块

执行 WaveForms 脚本。脚本语言是基于ECMAScript、ECMA-262标准的JavaScript。

可以在 GUI 中完成的操作更容易进行,如:设置通道、命名、静态配置。然后,使用脚本调整需要更改的参数,例如本文所用到的,通过 Script 函数来批量写入 SPI 数据。

不需要从脚本设置所有接口,因为脚本可以与工作区中的其他仪器一起保存。

3.3 启用 Logic Analyzer

启用 Logic Analyzer 可以清晰地观察到发送了什么数据,如下:

以上抓取配置使用了 Trigger,捕获 SPI 传输的开始信号。

 

3.4 编写 Script

以下脚本展示对 SPI接口进行基本的数据发送和接收操作:

if(!('Protocol' in this)) throw "Please open the Protocol tool";

Protocol.Mode.text = "SPI" // make sure SPI tab is selected
Protocol.SPI.Start() // activate select
Protocol.SPI.Write(8, [0xAA, 0xBB]) // send 2 words of 8 bit length
Protocol.SPI.Write(8, [0xCC])
var rg = Protocol.SPI.Read(8, 1) // read 1 words of 8 bit length
Protocol.SPI.Stop() // deactivate select
print(rg)
  • 检查是否已经打开了Protocol工具。如果没有打开,则抛出一个错误提示。 
  • 选择了 SPI 模式。
  • 激活片选信号,开始SPI通信。
  • 发送两个8位长度的数据字(0xAA和0xBB)。
  • 发送一个8位长度的数据字(0xCC)。
  • 读取一个8位长度的数据字,并将其存储在变量rg中。
  • 停止SPI通信,取消片选信号。
  • 打印读取到的数据。

由于启用了 Logic Analyzer,我们可以观察到每根信号线的变化。这对于调试 SPI 接口非常有帮助。

更改脚本代码,可以轻松实现更加复杂的控制功能:

if(!('Protocol' in this)) throw "Please open the Protocol tool";

Protocol.Mode.text = "SPI"; // 确保选择了SPI模式
Protocol.SPI.Start(); // 激活片选信号,开始SPI通信

for (var i = 1; i <= 100; i++) {
    Protocol.SPI.Write(8, [i]); // 发送一个8位长度的数据字
}

Protocol.SPI.Stop(); // 停止SPI通信,取消片选信号

这个脚本会依次发送从1到100的十进制数到SPI接口。每个数都作为一个8位的数据字发送。 

当然,也可以通过数组发送预先定义好的寄存器数据:

if(!('Protocol' in this)) throw "Please open the Protocol tool";

Protocol.Mode.text = "SPI"; // 确保选择了SPI模式
Protocol.SPI.Start(); // 激活片选信号,开始SPI通信

// 创建一个包含10个数据的数组
var dataArray = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];

// 通过SPI接口发送数组中的数据
for (var i = 0; i < dataArray.length; i++) {
    Protocol.SPI.Write(8, [dataArray[i]]); // 发送一个8位长度的数据字
}

Protocol.SPI.Stop(); // 停止SPI通信,取消片选信号

这个脚本会依次发送数组dataArray中的每个数据到SPI接口。

3.5 SPI 相关函数

.Start()

        激活选择信号。成功时返回 true,否则返回 false。

.Stop()

        停用选择信号。成功时返回 true,否则返回 false。

.ReadWrite(bits per word, [word1, word2...] ) 

        四线SPI数据传输。返回读取的字数组。

.Write(bits per word, [word1, word2...] )

        3或4线 SPI 数据写入。成功时返回 true,否则返回 false。

.Read(bits per word, number of words to read)

        四线 SPI 数据读取。从 DQ1 返回读取的字数组。

.Read0(bits per word, number of words to read) 

        三线 SPI 数据读取。从 DQ0 返回读取的字数组。

.WriteDual(bits per word, [word1, word2...])

        写入到 DQ0,1的双线 SPI 数据。成功时返回 true,否则返回 false。

.ReadDual(bits per word, number of words to read)

        从 DQ0,1 读取双线 SPI 数据。返回读取的字数组。

.WriteQuad(bits per word, [word1, word2...]) 

        写入到 DQ0,1,2,3 的四线 SPI 数据。成功时返回 true,否则返回 false。

.ReadQuad(bits per word, number of words to read)

        从 DQ0,1,2,3 读取四线 SPI 数据。返回读取的字数组。

.DQ#.Initial.text

        初始/空闲值:"0","1","Z"。

4. 总结

在本文中,我们复习了 SPI 接口的基本概念、特点及其在 AD2 设备上的配置和操作方法。SPI 接口因其全双工通信能力、高速率和灵活的主从配置而广泛应用于数字通信领域。通过使用 AD2 的Protocol-SPI 模块,用户可以轻松地实现对 SPI 通信的监控和控制,包括设置信号线、调整通信参数以及执行数据传输等操作。

本文还演示了如何在 WaveForm 软件环境中使用 Protocol 和 Script 模块来配置和操作 SPI 接口。通过具体的脚本示例,展示了如何发送和接收数据,以及如何利用 Logic Analyzer 来观察和调试SPI 通信过程。这些操作不仅有助于理解 SPI 协议的实际应用,也提供了强大的工具来优化和解决可能出现的通信问题。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值