草庐IT

一文看懂SGPIO协议

justiess 2023-04-21 原文

目录

1.简介

2.接口列表

3.时序

3.1 Sclok

3.2 Sload

3.3 Sdataout

3.4 Sdatain

4.应用

1.简介

串行通用输入输出(SGPIO)是一种串行通用IO信号的方法。通常用于发起方(如主机总线适配器)和目标方(如背板)之间的通信。目标方通常将输出的串行信号转换为多个并行信号,并通过GPIO提供输入信号。发起方和目标方都可以由一个或多个芯片组成。如果使用多个芯片,它们应协调驱动总线信号。

SGPIO通常用于SATA或SAS等高速存储接口,它有四组接口信号如下图所示:

图1 SGPIO

2.接口列表

信号

T/I

描述

Sclok

T

时钟(100k)

Sload

T

当前比特流的结束信号;在下一个时钟开始一个新的比特流

Sdataout

T

串行数据输出比特流

Sdatain

I

串行数据输入比特流,并不是所有的设备都支持Sdatain

注:T表示发起方,I表示目标方。

3.时序

图2 SGPIO时序关系

3.1 Sclok

目标方应使用SClock的下降沿锁定SLoad和SDataOut。发起方应使用SClock的下降沿锁定SDataIn。当不使用SGPIO总线时(例如,在复位期间),发起方应将SClock设置为1(即三态)。当使用SGPIO总线但故意不交换位流时,发起方应将SClock设置为0。这会让目标知道发起程序仍然存在并且尚未删除。

3.2 Sload

SLoad信号指示bit流何时结束并重新启动。SLoad设置为1的时钟周期是位流的最后一个时钟周期。

SLoad设置为1后,发起方应在SLoad的下一个四位位置传输厂商自定义的模式。此后,发起方应将SLoad设置为0,直到它想要重新启动位流。厂商自定义的位用于将独立于驱动器的信息传达给目标方。

通电后,发起方可以使用SClock的第一个上升沿将SLoad设置为1。如果SClock已经为高,并且供应商特定的位0也设置为1,则目标在第一个bit流期间不会与发起方同步。因此,在第一个bit流期间,发起方不应将厂商自定义的位0设置为1。在第四个驱动器(即驱动器3)的第三位位置之前,发起方不得重新启动位流。发起方只应将SLoad设置为1,以便在驱动器的第三位位置期间重新启动位流。需要至少5个连续的0位来区分第一个1值的SLoad和L0到L3可能的1值。为了识别bit流的开始,目标应该检测到5个或更多位的SLoard设置为0,然后检测到它设置为1。

当不使用SGPIO总线时(例如,在复位期间),发起方应将SLoad设置为1(即三态)。 当使用SGPIO总线但不交换bit流时,发起程序应将SLoad设置为0。这会让目标方知道发起程序仍然存在并且尚未删除。

3.3 Sdataout

SDataOut信号携带与目标背板上的磁盘驱动器相关联的输出位。它用于控制LED等指示灯(例如活动、定位和错误指示灯)。

当不使用SGPIO总线时(例如,在复位期间),启动器应将SDataOut设置为1(即三态)。支持相应的驱动器号。

3.4 Sdatain

SDataIn信号携带与目标背板上的磁盘驱动器相关联的输入位。它旨在报告驱动器存在检测等信息(请参阅SATA)。并非所有发起方和目标都支持SDataIn。

4.应用

图3 SGPIO应用与SAS和SATA

有关一文看懂SGPIO协议的更多相关文章

  1. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  2. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  3. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  4. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  5. 一文解决关于VLAN所有的疑惑 - 2

    一文解决关于VLAN所有的疑惑VLAN基本概念为什么需要VLAN?怎么在交换机上划分VLAN,VLAN的工作原理有了子网,已经隔离了广播,还需要VLAN干啥?只进行子网划分,不进行VLAN划分VLAN划分与子网划分附加VLAN信息的方法VLAN划分交换机的端口类型(Access和Trunk)一、访问链接二、汇聚链接汇聚链接VLAN间通信为什么要进行VLAN间通信?路由器实现VLAN间通信路由器和交换机的连接方式通信细节三层交换机实现VLAN间通信加速VLAN间通信三层交换机与路由器三层交换机路由器路由器和交换机配合构建LAN的实例使用VLAN设计局域网的特点VLAN增加网络的灵活性不使用VLA

  6. 一文让你彻底掌握操作符(超详细教程) - 2

    ✅作者简介:大家好,我是小杨📃个人主页:「小杨」的csdn博客🔥系列专栏:小杨带你玩转C语言【初阶】🐳希望大家多多支持🥰一起进步呀!大家好呀!我是小杨。小杨花几天的时间将C语言中的操作符这部分知识做了一个大总结,在方便自己复习的同时也能够帮助到大家。通篇字数在一万字左右,可以算作是非常详细了,一文就可以带领大家彻底掌握操作符这部分内容,文章很长建议先收藏再看,防止下次想看就找不到啦。文章目录✍1,算术操作符✍2,移位操作符    🔍2.1,左移操作符    🔍2.2,右移操作符       ✨2.2.1,算术移位       ✨2.2.2,逻辑移位✍3,位操作符    🔍3.1,按位与&   

  7. ruby - 协议(protocol)族不支持的地址族 - 2

    我尝试执行此页面中显示的ruby示例:http://tomayko.com/writings/unicorn-is-unix但我得到的只是echo.rb:9:in`bind':Addressfamilynotsupportedbyprotocolfamily-bind(2)(Errno::EAFNOSUPPORT)fromecho.rb:9:in`'有什么想法吗? 最佳答案 我遇到了同样的问题。只需将localhost更改为0.0.0.0:address=Socket.pack_sockaddr_in(4242,'0.0.0.0')

  8. ruby-on-rails - 在 Github 上 fork Ruby/Rails gem 的正确协议(protocol)/礼仪是什么,可以作为持续的并行 fork 进行维护? - 2

    最近我使用了一个由单个开发人员创建的不错的gem,它托管在Github上。在我的工作中,我不得不对它进行一些实质性的修改,添加一些改进。有些是特定于项目的,有些是特定于gem的,还有一些是独立的改进。对于特定于gem的改进(例如,错误修复),我fork了存储库,应用了修复,并提出了拉取请求。然后,然而,我注意到独立的改进有点属于原始gem的并行、持续的分支类别。更清楚地说,你以前见过它;我重写了原始gem的View以使用TwitterBootstrap框架。因此,我也将它推送到了Github,但是,当然,我没有提出拉取请求——相反,我更新了README以解释不同之处,并感谢gem的原作

  9. ruby-on-rails - OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=unknown 状态:未知协议(protocol) - 2

    我关注了很多关于这个问题的帖子,但没有一个对我有帮助。我正在尝试使用最简单的irb命令进行连接:require'open-uri'open('https://aristo4stu3.bgu.ac.il')奇怪的是,对于我尝试过的任何其他httpsuri,它都工作正常(即https://google.com)。出于调试目的,我什至尝试使用以下方法禁用SSL验证:OpenSSL::SSL::VERIFY_PEER=OpenSSL::SSL::VERIFY_NONE这似乎也没有帮助。我的设置是(在AWS上):$rvm-vrvm1.21.3(stable)byWayneE.Seguin,Mic

  10. ruby-on-rails - 如何使用rails输出当前协议(protocol)和url? - 2

    我有一个共享对话框。在开发中它看起来像:http://xxxxxx.com/stuff产品上:https://yyyyyyyyyyy.com/stuff输出#Protocol##URL#的最佳Rails方式是什么我可以在哪里设置它们?谢谢 最佳答案 request.protocolrequest.url参见requestobject. 关于ruby-on-rails-如何使用rails输出当前协议(protocol)和url?,我们在StackOverflow上找到一个类似的问题:

随机推荐