这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
icore4tfpga_17 [2020/03/06 14:58] 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通信指令表 === | ||
- | **表15.1 SPI通信指令表** | + | * **表15.1 SPI通信指令表** |
- | |指令名称 |字节1 |字节2 |字节3 |字节4| | + | |
- | |器件ID |01h | | ||| | + | ^指令名称 ^字节1 ^字节2 ^字节3 ^字节4^ |
- | |写数据长度|02h |A15~A8|A7~A0||| | + | |器件ID |01h | | | | |
- | |写数据 |04h |A15~A8 |A7~A0 |数据(直至写完所有数据)| | + | |写数据长度 |02h |A15~A8 |A7~A0 | | |
- | |读数据长度 |05h |A15~A8 |A7~A0 || | + | |写数据 |04h |A15~A8 |A7~A0 |数据(直至写完所有数据)| |
- | |读数据 |07h |A15~A8 |A7~A0 |数据(直至读完所有数据)| | + | |读数据长度 |05h |A15~A8 |A7~A0 | | |
- | |读错误信息 |08h | |||| | + | |读数据 |07h |A15~A8 |A7~A0 |数据(直至读完所有数据)| |
+ | |读错误信息 |08h | | | | | ||
* ARM与FPGA通信采用的是半双工式通信,FPGA通过识别指令完成与ARM的交互。 | * ARM与FPGA通信采用的是半双工式通信,FPGA通过识别指令完成与ARM的交互。 | ||
行 72: | 行 70: | ||
read_address = 0; | read_address = 0; | ||
read_length = 1024; | read_length = 1024; | ||
- | * 2、实现ARM与FPGA通信,对FPGA而言,其关键就在于SPI时序的模拟,实现SPI数据的接收与发送,实现数据与传输信号之间的串并转换。FPGA首先接收ARM指令,然后解析指令,存储相应的信息与数据,并根据指令需求将相应的指令数据放到SIMO总线上,等待ARM读取,从而实现两者之间的数据交互。SPI时序的硬件语言描述如下: | + | </code> |
+ | * 2、实现ARM与FPGA通信,对FPGA而言,其关键就在于SPI时序的模拟,实现SPI数据的接收与发送,实现数据与传输信号之间的串并转换。FPGA首先接收ARM指令,然后解析指令,存储相应的信息与数据,并根据指令需求将相应的指令数据放到SOMI总线上,等待ARM读取,从而实现两者之间的数据交互。SPI时序的硬件语言描述如下: | ||
<code verilog> | <code verilog> | ||
//------------------------------------------------// | //------------------------------------------------// | ||
行 152: | 行 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; | ||
行 183: | 行 182: | ||
endcase | endcase | ||
end | end | ||
- | <code verilog> | + | </code> |
==== 五、 实验步骤及实验结果 ==== | ==== 五、 实验步骤及实验结果 ==== | ||
- | + | {{ :icore4t:icore4t_ide_1_37.jpg?600 |}} | |
- | - 将硬件正确连接,如图15.2所示。 | + | - 将硬件正确连接,如图17.2所示。 |
- | {{ :icore4t:icore4t_fpga_15_2.jpg?direct |图15.2}} | + | |
- 打开putty串口调试工具,打开设备管理器查看对应的端口信息,在putty中打开对应的端口,用于打印串口信息; | - 打开putty串口调试工具,打开设备管理器查看对应的端口信息,在putty中打开对应的端口,用于打印串口信息; | ||
- 将编写好的FPGA代码进行编译,并下载到开发板中; | - 将编写好的FPGA代码进行编译,并下载到开发板中; | ||
- 将编写好的ARM代码编译,并下载到开发板中,putty工具中会打印相应的SPI通信相关信息; | - 将编写好的ARM代码编译,并下载到开发板中,putty工具中会打印相应的SPI通信相关信息; | ||
- | - 观察实验现象及putty终端打印信息——FPGA_LED闪烁,putty终端打印如图15.3所示. | + | - 观察实验现象及putty终端打印信息——FPGA_LED闪烁,putty终端打印如图17.3所示. |
- | {{ :icore4t:icore4t_fpga_15_3.png?direct |}} | + | {{ :icore4t:icore4t_fpga_17_3.png?direct |图17.3}} |
==== 六、 拓展实验 ==== | ==== 六、 拓展实验 ==== | ||
- | 1、通过Signaltap观察SPI通信的时序是否和参考时序一致。 | + | - 通过Signaltap观察SPI通信的时序是否和参考时序一致。 |
- | 2、实现错误信息读取指令功能。 | + | - 实现错误信息读取指令功能。 |