SATA主机协议的FPGA实现之准备工作
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校验方式,并对数据进行加解扰;物理层负责设备识别和初始化,实现高速串行数据链路,在传输线上发送和接收已编码的串行数据流,对数据进行串并/并串转换,并从数据流中分离出时钟信息。接下来的几篇文章将分别从这几个协议层的实现出发讲解整个项目的实现过程。
SATA主机协议的FPGA实现之准备工作的更多相关文章
- SATA主机协议的FPGA实现之物理层设计
SATA主机协议的FPGA实现之物理层设计 接上一篇文章,这里讲解SATA主机协议的物理层的实现过程. 下图是标准SATA协议文档中给出的物理层结构.可以看到它包含控制模块.时钟数据提取单元.同步 ...
- 千兆以太网TCP协议的FPGA实现
转自https://blog.csdn.net/zhipao6108/article/details/82386355 千兆以太网TCP协议的FPGA实现 Lzx 2017/4/20 写在前面,这应该 ...
- 详解串行通信协议及其FPGA实现
前言 好久没更新博客了,这篇文章写写停停,用了近一周的时间,终于写完了.本篇文章介绍,串口协议数据帧格式.串行通信的工作方式.电平标准.编码方式及Verilog实现串口发送一个字节数据和接收一个字节数 ...
- 转:SATA协议简介
SATA协议简介 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/FA99999/article/details/70738724 1.概述 本文档主 ...
- IDE、SATA、SCSI、SAS、FC、SSD硬盘类型介绍[zz]
目前所能见到的硬盘接口类型主要有IDE.SATA.SCSI.SAS.FC等等. IDE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘.SCSI是"小型计算机系 ...
- 基于FPGA的1553B通信模块的设计(转)
reference:http://www.21ic.com/app/eda/201808/798483.htm https://www.milstd1553.com/ [导读] 摘 要: 提出一种将F ...
- Aurora 8B/10B、PCIe 2.0、SRIO 2.0三种协议比较
在高性能雷达信号处理机研制中,高速串行总线正逐步取代并行总线.业界广泛使用的Xilinx公司Virtex-6系列FPGA支持多种高速串行通信协议,本文针对其中较为常用的Aurora 8B/10B和PC ...
- OV7725学习之SCCB协议(一)
OV7725摄像头只能作为从机,通过SCCB协议配置内置的172个寄存器.因此首先要了解的就是SCCB总线 1.SCCB协议简述 SCCB协议有两线也有三线,两线为SIO_C与SIO_D,三线为SIO ...
- SAS,SATA普及文档
目前所能见到的硬盘接口类型主要有IDE.SATA.SCSI.SAS.FC等等. IDE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘.SCSI是"小型计算机系 ...
随机推荐
- Linux学习笔记9
管道 pipe 如 : ls |less -MN 含义把ls 结果输出到less ls=|=more ls 命令 ls -a 展示隐藏的文件 隐藏文件一般以.开始 ls -t 以时间戳排序 ls - ...
- ubantu中搭建virtualenv+python3.4+flask
上一篇文章是基于ubantu14.04自带的Python2.7搭建的virtualenv+python+flask(需要特别注意文件夹是中文的问题),今天忙碌了三个小时,在网上大量查阅资料完成了vir ...
- 服务注册与发现---eureka
eureka简介:云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移. 话不多说直接上代码 首先新建一个springcloud eurekaserver项目. ...
- 网络基础配置--usg系统升级
1.usg2000系统升级 1.1.TFTP设置 这里用到一个工具:3CDeamon, 是在由3Com开发类别 Web Development Freeware 软件,是一个简易服务器工具,含TFTP ...
- 潭州课堂25班:Ph201805201 django框架 第十三课 自定义404页面,auth系统中的User模型,auth系统权限管理 (课堂笔记)
当 DEBUG=True 时,django 内部的404报错信息, 自带的报错信息, 要自定义404信息,要先把 DEBUG=False , 之后要自定义4040页面,有两种方法, 方法1,在创建40 ...
- 使用requests进行模拟登陆
import re import requests header = { 'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWe ...
- BZOJ4966 : 总统选举
线段树维护每个点的最有可能是答案的数以及它的权重. 合并两个节点的时候,将权重互相抵消,保留较大的那一个. 得到答案后,再在对应权值的Treap中查询出现次数,检查是否真正是答案. 时间复杂度$O(n ...
- Android 中的设计模式
1.单例模式 ContentProvider是单例模式,多个ContentResolver操作的都是同一个ContentProvider.
- 前端可视化数据--echarts
很幸运能够给大家分享我对echarts的见解,在一些大型互联网公司面试时都会问到会使用echarts么? 今天在做项目时有这个需求,有幸学习echarts. 二.echarts.js的优势与不足 优 ...
- redis:list列表类型的操作
1. list列表类型的操作 1.1. lpush/rpush key value [value ...] 链表的头部(左侧)或尾部(右侧)插入值 语法:lpush key value [value ...