这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore4tfpga_17 [2020/03/06 15:04] zgf [六、 拓展实验] |
icore4tfpga_17 [2024/04/10 11:18] zhaowenzhe [五、 实验步骤及实验结果] |
||
---|---|---|---|
行 2: | 行 2: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-03-06 | gingko | 初次建立 | | | V1.0 | 2020-03-06 | gingko | 初次建立 | | ||
- | ===== 实验十五:SPI通信实验——基于SPI总线的ARM与FPGA通信 ===== | + | ===== 实验十七:SPI通信实验——基于SPI总线的ARM与FPGA通信 ===== |
==== 一、 实验目的与意义 ==== | ==== 一、 实验目的与意义 ==== | ||
行 14: | 行 13: | ||
==== 二、 实验设备及平台 ==== | ==== 二、 实验设备及平台 ==== | ||
- | - iCore4T 双核心板。[[https://item.taobao.com/item.htm?spm=a1z10.1-c.w137644-251734891.3.5923532fDrMDOe&id=610595120319|点击购买]] | + | - iCore4T 双核心板。 |
- | - Blaster(或相同功能)仿真器。[[https://item.taobao.com/item.htm?id=554869837940|点击购买]] | + | - iTool A(或相同功能)仿真器。 |
- | - JLINK(或相同功能)仿真器。 | + | - USB Type C 线缆。 |
- | - Micro USB线缆。 | + | |
- Keil MDK 开发平台。 | - Keil MDK 开发平台。 | ||
- Quartus开发平台。 | - Quartus开发平台。 | ||
行 39: | 行 37: | ||
* CPHA=0:第一个时钟延开始采样MSBit | * CPHA=0:第一个时钟延开始采样MSBit | ||
* CPHA=1:第二个时钟延开始采样MSBit | * CPHA=1:第二个时钟延开始采样MSBit | ||
- | * SPI总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。如图15.1所示 | + | * SPI总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。如图17.1所示 |
- | {{ :icore4t:icore4t_fpga_15_1.png?direct |}} | + | {{ :icore4t:icore4t_fpga_17_1.png?direct |}} |
- | 图15.1 | + | |
=== 3.SPI通信指令表 === | === 3.SPI通信指令表 === | ||
行 74: | 行 71: | ||
read_length = 1024; | read_length = 1024; | ||
</code> | </code> | ||
- | * 2、实现ARM与FPGA通信,对FPGA而言,其关键就在于SPI时序的模拟,实现SPI数据的接收与发送,实现数据与传输信号之间的串并转换。FPGA首先接收ARM指令,然后解析指令,存储相应的信息与数据,并根据指令需求将相应的指令数据放到SIMO总线上,等待ARM读取,从而实现两者之间的数据交互。SPI时序的硬件语言描述如下: | + | * 2、实现ARM与FPGA通信,对FPGA而言,其关键就在于SPI时序的模拟,实现SPI数据的接收与发送,实现数据与传输信号之间的串并转换。FPGA首先接收ARM指令,然后解析指令,存储相应的信息与数据,并根据指令需求将相应的指令数据放到SOMI总线上,等待ARM读取,从而实现两者之间的数据交互。SPI时序的硬件语言描述如下: |
<code verilog> | <code verilog> | ||
//------------------------------------------------// | //------------------------------------------------// | ||
行 154: | 行 151: | ||
send_state <= send_state + 1'd1; | send_state <= send_state + 1'd1; | ||
end | end | ||
- | 4'd2:begin | + | 4'd2:begin |
spi_miso_r <= data_out[5]; | spi_miso_r <= data_out[5]; | ||
send_state <= send_state + 1'd1; | send_state <= send_state + 1'd1; | ||
行 187: | 行 184: | ||
</code> | </code> | ||
==== 五、 实验步骤及实验结果 ==== | ==== 五、 实验步骤及实验结果 ==== | ||
- | + | {{ :icore4t:icore4t_ide_1_37.jpg?600 |}} | |
- | 1、将硬件正确连接,如图15.2所示。 | + | - 将硬件正确连接,如图17.2所示。 |
- | {{ :icore4t:icore4t_fpga_15_2.jpg?direct |图15.2}} | + | - 打开putty串口调试工具,打开设备管理器查看对应的端口信息,在putty中打开对应的端口,用于打印串口信息; |
- | + | - 将编写好的FPGA代码进行编译,并下载到开发板中; | |
- | 2、打开putty串口调试工具,打开设备管理器查看对应的端口信息,在putty中打开对应的端口,用于打印串口信息; | + | - 将编写好的ARM代码编译,并下载到开发板中,putty工具中会打印相应的SPI通信相关信息; |
- | 3、将编写好的FPGA代码进行编译,并下载到开发板中; | + | - 观察实验现象及putty终端打印信息——FPGA_LED闪烁,putty终端打印如图17.3所示. |
- | 4、将编写好的ARM代码编译,并下载到开发板中,putty工具中会打印相应的SPI通信相关信息; | + | {{ :icore4t:icore4t_fpga_17_3.png?direct |图17.3}} |
- | 5、观察实验现象及putty终端打印信息——FPGA_LED闪烁,putty终端打印如图15.3所示. | + | |
- | {{ :icore4t:icore4t_fpga_15_3.png?direct |}} | + | |
==== 六、 拓展实验 ==== | ==== 六、 拓展实验 ==== | ||