第四章 串行协议应用

第四章 串行协议应用

重点内容

①使用SPI主控端控制器进行数据传输的方法和注意事项;
(关于什么是SPI,有的人可能已经不记得了,比如本人555,可以移步这个帖子SPI通信协议学习
②利用Quartus II快速的编辑SPI写入状态机,并使用ModelSim进行仿真;
③SPI主控端控制器的程序设计进行ModelSim仿真的结果分析;
④实验范例:将SPI实现于DE2-115,控制“LTM 4.3”触摸屏画面的翻转,并利用SignalTap II进行逻辑分析和观测;
⑤介绍I2C主控数据传输的时序和操作范例;(I2C简介简介百度百科
⑥如何利用Quartus II快速的编辑I2C写入状态机,并使用ModelSim进行仿真;
⑦I2C主控端控制器的程序设计与进行ModelSim仿真的结果分析;
⑧实验范例:将设计的I2C取代DE2-115现有实例“音乐合成器”的I2C,来控制开发板上的Audio CODEC,并搭配SignalTap II进行逻辑分析与观测。

按图索骥,按部就学习!

4-1 SPI Master 控制器设计

SPI是Serial Peripheral Interaface
主控端(Master)与一个或多个设备(Slave)间的基本的同步串行通信
SPI接口包括两个控制信号线与两个数据线:CS、SPC、SDI和SDO
1). CS是设备的使能控制端(CS低电平时,开始传输;CS高电平时,传输结束);
2).SPC串行接口时钟;
3).SDI/O是设备串行接口的数据输入脚和输出脚,在SPI的下降沿被驱动,上升沿被截取;

4-1-1SPI写的操作规范

CS低电平开始传输,高电平传输结束,SPI写的传输包括一个六位地址A[5]到A[0]与1_位读/写信号(R/W)

4-1-2 SPI读操作范例

CS低电平开始传输,高电平传输结束,SPI读的传输包括一个六位地址A[5]到A[0]与1_位读/写信号(R/W)

4-1-3 SPI主控端(Master)程序设计

通过SPI通信控制从设备为LCD驱动芯片,需先将MSB传输出去
(至于什么是MSB,我也很好奇:
1、LSB的意思是:全称为Least Significant Bit,在bai二进制du数中意为最低有效zhi位,一般来说,MSB位于二dao进制数的最左侧,LSB位于二进制数的最右侧。
2、MSB的意思是:全称为Most Significant Bit,在二进制数中属于最高有效位MSB是最高加权位,与十进制数字中最左边的一位类似。)
需要使用的的部件有:
1)状态机
2)并串输入/串接输出移位寄存器
3)选择器
4)计数器

4-1-4 状态机设计

四种状态:X_IDLE,X_START,X_SHIFT,X_STOP
对应的每一个状态下都有下一个状态与之对应!

4-1-5 编辑SPI写入状态机

编辑流程如下:
1.打开Quartus II;
2.新建工程导向;
3.工程导览;
4.新建文件;
5.新增输入脚;
6.变更引脚名称;
7.新增输入脚;
8.变更引脚名称;
9.新增状态;
10.变更状态名称;
11.设定转变状态条件;
12.设定“General”页面;
13.设定“X_IDLE”状态输出情况;
14.设定“X_START”状态输出情况;
15.设定“X_SHIFT”状态输出情况;
16.设定“X_STOP”状态输出情况;
17.保存;
18.产生“HDL”文件;
19.修正“spi_three_wire.v”文件;
20.保存并编译。

通过此方法可以直接生成所需要的Verilog HDL 语言

4-1-6 使用ModelSim-Altera 仿真SPI写入状态机

编辑流程如下:
1.打开Modelsim-Altera;
2.新建工程;
3.添加项目至工程;
4.编辑“spi_three_wire-test.v”;
5.加入存在的设计文件;
6.编译文件;
7.开始仿真;
8.选择仿真;
9.设定仿真时间长度;
10.执行仿真;
11.分析仿真结果。

4-1-7主控端(Master)SPI程序设计

在完成了SPI传送数据的状态机区块后,加上“并串接输入/串接输出移位寄存器”、“选择器”和“计数器”部分

4-1-8 编辑主控端(Master)SPI程序设计

编辑流程:
1.打开Quartus II;
2.新建工程向导;
3.工程导览;
4.添加数据库;
5.新建文件夹;
6.保存;
7.编辑文件;
8.保存并编译。

4-1-9 使用ModelSim-Altera 仿真SPI程序

实验步骤:
1.打开ModelSim-Altera;
2.新建工程;
3.添加项目至工程;
4.编辑“spi_wirte_test.v”;
5.加入存在的设计文件;
6.编译文件;
7.开始仿真;
8.打开波形窗口;
9.设定仿真时间长度并执行仿真;
10.分析波形。

4-1-10 SPI在DE2-115上的实现
4-1-11 在DE2-115上实现SPI的编辑

实验步骤:
1.使用“Terasic”,建立工程;
2.使用外围模块;
3.打开Quartus II;
4.打开工程;
5.查看顶层模块;
6.添加数据库;
7.修改顶层模块;
8.复制文件;
9.工程文件导览;
10.编译;
11.分配器件;
12.引脚分配;
13.硬件连接;
14.打开烧录窗口;
15.硬件设定;
16.烧录;
17.实验结果。

4-1-12 使用SignalTap II逻辑分析仪观测

实验步骤:
1.打开工程;
2.打开SignalTap II窗口;
3.硬件连接;
4.设定USB连线设备;
5.设定烧录文件;
6.增加要观察的引脚;
7.设定采样Clock;
8.设定“Sample depth”;
9.保存;
10.编译;
11.烧录sof文件;
12使用SignalTap II观察实验结果。

4-2 I2C串行传输介绍

I2C是一种串行通信总线,主要用途控制飞利浦生产的芯片,

4-2-1 I2C的开始与结束信号

开始条件为当SCLK(时钟脚)保持在高电平时,SDIN(数据脚)从高到低,进行地址和数据的传输;
停止的条件是被定义成在SCLK在高电平时,SDIN有低到高的转换。

4-2-2 I2C写的操作范例

将数据写入某个寄存器,查出设备的器件地址(Device Address)寄存器地址(Register Adress)

过程:
开始:①主控端产生一个起始信号ST,发出欲控制的器件地址;
②设备收到后,回复ACK信号;
③送出寄存器地址,,收到主控端信号 回复ACK;
④送出数据,收到后回复ACK;
结束:⑤传输完成,主控发出SP信号,完成数据的传输及写入。
在这里插入图片描述

4-2-3 I2C读的操作规范

从某个设备的某个寄存器读取8位数据,查出设备的器件地址(Device Address)寄存器地址(Register Adress)

过程:
①主控端产生一个起始信号ST,主控端发出欲控制器件地址加一位W/R读写位(设定为W);
②设备收到主控端信号后,回应一个ACK信号;
③送出寄存器地址,主控端发出8位信号后,回应一个ACK信号;
④主控端重新送出开始信号SR,再由主控端发出欲控制的器件地址,并加上一位W/R读写位;
⑤从设备收到主控端8位信号后,回应ACK信号,读取8位数据
结束:⑥主控端读取到8位信号后,不会回应ACK信号(NAK),最后从主控端送出停止信号SP。
在这里插入图片描述

4-2-4 I2C应用实例

应用I2C串行输出控制DE2-115上的Audio Codec芯片WM8731
主控端芯片(Master)为Cyclone IV器件;
设备端芯片(Slave)为WM8731

控制接口模式选择模式有 0 1
对应的接口格式 0>>两线模式SDIN数据传输的双向脚,SCLK用作串行时钟的输出脚;
1>>三线模式 代表读操作

4-2-5 I2C主控端(Master)程序设计

使用到的器件:

1)状态机 控制数据的载入与移位;
2)并串接输入/串接输出移位寄存器 将并行数据转为串行;
3)选择器(一) 输出SHEN控制 SHEN0时状态机输出SDO至选择器(一);SHEN为1时,Q[26]送至选择器(一);
4)选择器(二) 输出SEL控制,SEL为0时,将“1’b0”送选择器二输出SDIN;SEL为1时,将“1’bz”送至选择器二输出SDIN输出;
5)具有载入与清除功能的寄存器 保存设备有SDIN传送到主控端的ACK1,ACK2与ACK3信号,rstACK信号控制同步清除,ldnACK1控制ACK1的载入;ldnACK2控制ACK2的载入;ldnACK3控制ACK3的载入;
6)三输入的‘OR’闸 ACK1 ACK2 ACK3 做OR运算
7)计数器 为计算所传送的位数 具有使能与非同步清零和同步清零的5位计数器。

4-2-6 I2C 状态机设计

八种状态,每种状态有对应的转换条件

4-2-7 编辑I2C写入状态机

编辑流程:
1,打开Quartus II
2,新建工程向导
3,工程导览
4,新建文件
5,新建输入脚
6,变更引脚名称
7,新增输出脚
8,变更引脚名称
9,新增状态
10,变更状态名称
11,设定转变状态条件
12,设定‘General’页面
13,设定‘X_IDLE’状态输出情况
14,设定‘X-GO’状态输出情况
15,设定‘X_START’状态输出情况
16,设定‘X_WAIT’状态输出情况
17,设定‘X_SHIFT’状态输出情况
18,设定‘X_STOP’状态输出情况
19,设定‘X_FINAL’状态输出情况
20,设定‘X_END’状态输出情况
21,保存
22,产生‘HDL’文件
23,修正‘I2C_control.v’文件
24,保存并编译

4-2-8 使用ModelSim-Altera 仿真I2C写入状态机

仿真流程如下:
1,打开ModelSim-Altera
2,新建工程
3,添加项目至工程
4,编辑“I2C_control_test.v”
5,加入存在的设计文件
6,编译文件
7,开始仿真
8,打开波形窗口
9,设定仿真长度
10,执行仿真
11,分析波形

4-2-9 主控端(Master)I2C程序设计

加入“并串接输入/串接输出移位寄存器”,“选择器”,“具有载入功能与同步清除功能的寄存器”与“计数器”部分

4-2-10 编辑I2C程序设计

编译流程:
1,打开Quartus II
2,新建工程向导
3,工程导览
4,添加数据库
5,新建文件
6,保存
7,编辑文件
8,保存文件编译

4-2-11 使用ModelSim_Altera 仿真I2C程序

实验步骤:
1,打开ModelSim_Altera
2,新建工程
3,添加项目至工程
4,编辑“I2C_write_test.v”
5,加入存在的设计文件
6,编辑文件
7,开始仿真
8,选择仿真
9,设定仿真时间长度并执行仿真
10,分析仿真结果

4-2-12 以DE2-115实现音乐合成器

使用I2C控制程序来控制DE2-115上的AUDIO CODEC芯片"i2c_write"改成"I2C_Controller"进行控制的功能。

4-2-13区块置换与实测

实验步骤:
1,复制工程
2,打开工程
3,添加数据库
4,打开文件
5,更换引用模块
6,保存
7,分配器件
8,引脚分配
9,编译
10,硬件连接
11,打开烧录窗口
12,硬件设定
13,烧录
14,实验结果

4-2-14 使用SignalTap II 逻辑分析仪观测

实验步骤:
1,复制工程
2,打开工程
3,打开SignalTap I窗口
4,硬件连接
5,设定USB连线设备
6,设定烧录文件
7,设定采样CLock
8,设定“Sample depth”
9,增加要观察的引脚
10,保存
11,编译
12, 烧录sof文件
13,使用SignalTap II观察实验结果
14,修改I2C传输效率
15,保存
16,编译
17,烧录sof文件
18,使用SignalTap II 观察实验结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值