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是"小型计算机系 ...
随机推荐
- AngularJS的Scope和Digest
Angular是一个成熟和强大的JavaScript框架.它也是一个比较庞大的框架,在熟练掌握之前,需要领会它提出的很多新概念.很多Web开发人员涌向Angular,有不少人面临同样的障碍.Diges ...
- 洛谷.4655.[CEOI2017]Building Bridges(DP 斜率优化 CDQ分治)
LOJ 洛谷 \(f_i=s_{i-1}+h_i^2+\min\{f_j-s_j+h_j^2-2h_i2h_j\}\),显然可以斜率优化. \(f_i-s_{i-1}-h_i^2+2h_ih_j=f_ ...
- Linux服务部署--Java(二)
八.Maven安装配置 1. 下载 wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3. ...
- Java笔记(十九) 反射
反射 反射是在运行时获取类型的信息,再根据这些信息进行操作. 一.Class类 每个已加载的类在内存中都有一份类信息,每个对象都有指向它的类信息的引用. 在Java中,类信息对应的类就是java.la ...
- JavaScript基础笔记(五) 函数表达式
函数表达式 一.闭包 概念:闭包是指有权访问另一个函数作用域中变量的函数. function createCompareFun(propertyName) { return function (obj ...
- 最近在学习python,做了一道人机大战的题目,分享一下,虽然可能有些麻烦,但是每个人思维是不同的。
#题目如下:1:人和机器进行猜拳游戏写成一个类,首先选择角色:1 曹操 2张飞 3 刘备,然后选择的角色进行猜拳:1剪刀 2石头 3布 玩家输入一个1-3的数字 : 1 import random c ...
- nodejs,mongodb不同时区问题
问题:不同国家,使用不同时区,而服务器代码却在国内,跨时区日期不同,根据日期查询,查询不到数据了 1.mongodb存储的new Date()是UTC时间,也就是0时区的时间,世界标准时间 2.参考m ...
- 谈一谈java里面的反射机制
首先来看看百度百科中是如何定义的: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方 ...
- JS Function类型
每个函数都是Function类型的实例,由于函数是对象,函数名实际上是一个指向函数对象的指针,不会与某个函数绑定. 1.函数的声明: (1)函数声明语法: function sum (num1,num ...
- docker 报错: Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
centos 启动docker服务报错: Job for docker.service failed because the control process exited with error cod ...