SATA主机协议的FPGA实现之准备工作

 

  从2月中旬准备开始,经过3个月的奋战,我的又一个项目--基于FPGA的固态硬盘读写控制电路,已经基本实现。由于实用资料的匮乏,以及项目本身颇具挑战性,这个过程充满艰辛,这里也是希望写下一些经验,供后来的有心人参考,少走一些弯路。因为这个项目比较大,不是三言两语能说清楚的,可能接下来我会用5至6篇文章来讲这个东西,陆续的码文章也会耗时较久,希望先看到的看官耐心,同时由于完整的SATA协议实在是有点庞大,我的理解也不能尽善尽美,中间有不恰当之处也希望走过路过的指出。

  言归正传,这里先普及一下硬盘的两个基本知识,一个是关于硬盘的存储介质,另一个则是关于硬盘的接口技术。首先说说这个存储介质,目前市场上主流的硬盘存储介质有两种,一种是我们最常用的移动硬盘采用的光碟,另一种则是现在兴起的固态硬盘采用的flash存储介质。这两种介质的具体细节这里不追究,只简单说明一下固态硬盘的优势在于速度快,轻,声音小,不足在于价格贵,读写次数有限。然后说说这个接口技术,目前市场上主流的硬盘接口技术有SATA、SAS以及较久的IDE等,我们日常最常接触到的就是SATA。SATA是由IDE发展而来的,它突破了IDE很多极限,比如速度上、抗干扰上等。对于做硬盘主机控制器来说,我们跟关心的是接口协议,而对存储介质这些可以放到次要位置。

  这个项目开发的前期工作是一定要多研读相关的资料,包括SATA协议文档、ATA协议文档等。这里给出一个下载链接,里面是自己整理的相关资料,包括SATA3.0协议原版文档和一些有用的论文、中文文档等,需要的可以去下载。http://download.csdn.net/detail/dianshe12345/7571557。除此之外,因为要用到StratixIV器件,还需要看看StratixIV的器件手册,器件手册可以到ALTERA官网上去下载,有英文版也有中文版的。当然如果你用到的是其他的器件,那就去找相关的器件手册,貌似ALTERA的EP4 GX序列也有高速收发器,不过好像只能实现SATA1.0的传输速率。如果用ALTERA的器件做SATA协议,有两篇文档是推荐大家看看的,一篇是“理解SATA-SAS 40nm FPGA解决方案”,还有一篇是“实现Altera器件中的SATA与SAS协议”。这两篇文档告诉了我们怎么用ALTERA公司的器件去实现SATA协议,特别是第二篇,还是很有价值的,大家可以网上搜一下。

  下面大致说一下自己理解的SATA协议。SATA协议目前有三个版本--SATA1.0、SATA2.0以及SATA3.0,三个版本之间最大的区别就是传输速率,分别为1.5Gbps、3.0Gbps和6.0Gbps。SATA物理接口由7针信号线和15针电源线组成,其中7针信号线中由3根地线,2根差分输入线和2根差分输出线组成。SATA数据传输采用的是模拟的串行差分信号,这使它从根本上改变了IDE硬盘中的码间串扰问题。也是因为这个原因,我们采用FPGA在做SATA协议时,必须选用那些有专用物理器件支持的芯片--SATA协议传输速率高,而且最终需要将数字信号转化为模拟差分信号传输,一般的低端FPGA芯片并不能胜任,现在一些中高端FPGA芯片是采用内部集成高速收发器硬件的方式解决这个问题的,比如ALTERA公司的ALTGX收发器、XILINX公司的RocketIO MGT等,这也是为什么前文提到需要采用StratixIV这种FPGA芯片的原因,我采用的是DE4开发板。

  SATA协议分为4个协议层,分别是物理层、链路层、传输层和应用层。其中应用层提供寄存器接口,并对所有ATA命令进行解析,完成寄存器的更新;传输层位于链路层和应用层之间,负责处理控制信息,并将主机和设备之间需要交换的数据封装成数据帧,即帧信息结构FIS(Frame Information Structure);链路层负责控制传输控制原语和数据,从数据帧中提取数据进行8B/10B编解码。同时,为保证数据可靠传输,链路层还引入CRC-32校验方式,并对数据进行加解扰;物理层负责设备识别和初始化,实现高速串行数据链路,在传输线上发送和接收已编码的串行数据流,对数据进行串并/并串转换,并从数据流中分离出时钟信息。接下来的几篇文章将分别从这几个协议层的实现出发讲解整个项目的实现过程。

转:https://www.cnblogs.com/lwybky/p/3684247.html#undefined

SATA主机协议的FPGA实现之准备工作的更多相关文章

  1. SATA主机协议的FPGA实现之物理层设计

    SATA主机协议的FPGA实现之物理层设计   接上一篇文章,这里讲解SATA主机协议的物理层的实现过程. 下图是标准SATA协议文档中给出的物理层结构.可以看到它包含控制模块.时钟数据提取单元.同步 ...

  2. 千兆以太网TCP协议的FPGA实现

    转自https://blog.csdn.net/zhipao6108/article/details/82386355 千兆以太网TCP协议的FPGA实现 Lzx 2017/4/20 写在前面,这应该 ...

  3. 详解串行通信协议及其FPGA实现

    前言 好久没更新博客了,这篇文章写写停停,用了近一周的时间,终于写完了.本篇文章介绍,串口协议数据帧格式.串行通信的工作方式.电平标准.编码方式及Verilog实现串口发送一个字节数据和接收一个字节数 ...

  4. 转:SATA协议简介

    SATA协议简介 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/FA99999/article/details/70738724 1.概述 本文档主 ...

  5. IDE、SATA、SCSI、SAS、FC、SSD硬盘类型介绍[zz]

    目前所能见到的硬盘接口类型主要有IDE.SATA.SCSI.SAS.FC等等. IDE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘.SCSI是"小型计算机系 ...

  6. 基于FPGA的1553B通信模块的设计(转)

    reference:http://www.21ic.com/app/eda/201808/798483.htm https://www.milstd1553.com/ [导读] 摘 要: 提出一种将F ...

  7. Aurora 8B/10B、PCIe 2.0、SRIO 2.0三种协议比较

    在高性能雷达信号处理机研制中,高速串行总线正逐步取代并行总线.业界广泛使用的Xilinx公司Virtex-6系列FPGA支持多种高速串行通信协议,本文针对其中较为常用的Aurora 8B/10B和PC ...

  8. OV7725学习之SCCB协议(一)

    OV7725摄像头只能作为从机,通过SCCB协议配置内置的172个寄存器.因此首先要了解的就是SCCB总线 1.SCCB协议简述 SCCB协议有两线也有三线,两线为SIO_C与SIO_D,三线为SIO ...

  9. SAS,SATA普及文档

    目前所能见到的硬盘接口类型主要有IDE.SATA.SCSI.SAS.FC等等. IDE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘.SCSI是"小型计算机系 ...

随机推荐

  1. ps选区的两种复制方法

    1.选区选中之后,利用移动工具,按住alt键,拖动即可复制所选区域. ps:再一个图层上操作. 2.选区选中之后,Ctrl+c .Ctrl+v复制粘贴,按Ctrl+T移动. ps:新建一个图层操作,不 ...

  2. SpringBoot集成阿里巴巴Druid监控

    druid是阿里巴巴开源的数据库连接池,提供了优秀的对数据库操作的监控功能,本文要讲解一下springboot项目怎么集成druid. 本文在基于jpa的项目下开发,首先在pom文件中额外加入drui ...

  3. Linux下的Hadoop安装(本地模式)

    系统为CentOS 6.9,Hadoop版本2.8.3,虚拟机VMware Workstation 主要介绍Linux虚拟机安装.环境配置和Hadoop本地模式的安装.伪分布式和Windows下的安装 ...

  4. 错误代码:0x80070032 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    错误分析: vs2010默认采用的是.NET 4.0框架,4.0框架是独立的CLR,和.NET 2.0的不同,如果想运行.NET 4.0框架的网站,需要用aspnet_regiis注册.NET 4.0 ...

  5. ISP PIPLINE (一) BLC 以及 线性化

    what is the BlackLevel? 暗电流来源1.raw8为例,单个pixel的有效值是0~255,但是实际AD芯片的精度可能无法将电压值很小的一部分转换出来,芯片厂会刻意添加一个固定的偏 ...

  6. 数学——Euler方法求解微分方程详解(python3)

    算法的数学描述图解 实例 用Euler算法求解初值问题 \[ \frac{dy}{dx}=y+\frac{2x}{y^2}\] 初始条件\(y(0)=1\),自变量的取值范围\(x \in [0, 2 ...

  7. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习8

    #include <iostream>using namespace std;const int Size=20;struct Pizza{ char company[Size]; dou ...

  8. openstack之~glance安装部署

    接着部署完keystone后,接着部署glance 第一:部署安装glance glance关于数据库的操作: [root@controller /]# mysql -u root -p Enter ...

  9. JavaScript HTML DOM 元素操作(节点)

      在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType :节点 ...

  10. scipy.stats

    scipy.stats Scipy的stats模块包含了多种概率分布的随机变量,随机变量分为连续的和离散的两种.所有的连续随机变量都是rv_continuous的派生类的对象,而所有的离散随机变量都是 ...