SAS Protocol Layer - 5 (SPL-5) 第二章:SMP protocol(1)link层

SAS Protocol Layer - 5 (SPL-5) 系列文章目录

第一章:概述以及SAS协议基础概念(1)
第一章:概述以及SAS协议基础概念(2)
第一章:SAS协议基础概念(3)状态机和event
第一章:SAS协议基础概念(4)expander模块和功能
第二章:SMP protocol(1)link层



前言

目前关于SATA的中文协议概述有很多,但是基于SAS和expander的中文协议很少,基于此,为了方便自己巩固学习,记录此系列博客,欢迎纠正讨论。

本篇继续梳理:SMP的link层协议。


一、SMP协议是什么?

1、SMP connection

和SSP协议一样,SMP也分为initiatior和target,对于主机HBA设备而言,只能做initiatior,不能做target。

initiator会发起SMP request,发送的数据内容包含一个协议是SMP的OPEN,用于申请建立连接,target回复给主机一个OPEN_ACCEPT,确认连接可以建立,准备接收SMP_REQUEST frame;(此过程包含协议判断,如果协议不符合,target会用OPEN_REJECT (PROTOCAL NOT SUPPORTED)原语代替OPEN_ACCEPT原语。)

接下来initiator会发送SMP_REQUEST frame,同时开始等待SMP_RESPONSE,target接收到SMP_REQUEST frame以后回复initiator一个SMP_RESPONSE,frame格式内容如下:
SMP格式
等到initiator确认收到SMP_RESPONSE的所有内容后,connection准备close(以CLOSE (NORMAL)原语交互)。

二、SMP link层协议

1、SMP的发送和接收

当initiator的发起的SMP connection建立好后,SMP initiator 需要在 100 µs 内传输一个 SMP_REQUEST 帧,SMP target 需要在 1 900 µs 内响应一个 SMP_RESPONSE 帧,即SMP过程需要在2ms内完成。
在link层SMP frame需要包含在SOF和CRC+EOF之间,这与SSP一致。
SMP link层frame

在 EOF 之前,SOF 之后的最后一个数据字总是包含一个 CRC。SMP 链路层状态机会检查帧是否太短以及 CRC 是否有效。

2、SMP(SMP phy的链路层)transmitter and receiver

状态机每家公司做的不一样,只要能实现协议规定的内容交互即可。

SMP 发送机(transmitter)从 SMP 状态机(state machine)接收以下信息,指定要发送的字和帧:
a) 发送空闲字;以及
b) 传输帧,参数包含帧内容。

如果启用了 SAS dword模式,则 SMP transmitter 将响应发送帧报文,发送以下信息:

  1. SOF;
  2. 帧内容
  3. CRC;以及
  4. EOF。

SMP transmitter 根据已发送的字节向 SMP 状态机发送以下信息:
a) 帧已发送。

在没有指定要发送的字时,SMP 发送机应发送空闲的字(IDLE/0)。
SMP 接收机(receiver)向 SMP 状态机发送以下报文,表明从 SP_DWS 接收机或 SP_PS 接收机收到的原语和字,并忽略未提及的其他内容:
a) 收到 SOF;
b) 收到数据字
c) 收到 EOF
d) 接收到 ERROR;以及
e) 接收到无效 Dword。

3、SMP(SMP phy的链路层)状态机

1、SMP initiator:SMP_IP state
SMP_IP 状态机的功能是发送 SMP 请求(request)帧,然后接收相应的响应(response)帧。
如果该状态在接收到 SOF Received 信息后,但在接收到 EOF Received 信息前又接收到 SOF Received 信息(例如,以 SOF、数据字、SOF、数据字和 EOF 代替 SOF、数据字、EOF、SOF、数据字和 EOF),则该状态应丢弃正在处理的帧。
如果收到 SMP 发送break请求,则该状态应向 SL 状态机(link层控制connection和close的状态机)发送Request Break message。
收到 “Frame Transmitted ”报文后,该状态应向端口层(port层)发送 “Frame Transmitted”确认信息,检查 SMP 响应帧,并确定 SMP 响应帧是否无差错接收(如无 CRC 错误)。

接收的SOF和EOF之间的dword数量如果超过257个或少于2个,会报错,too long error或too short error。

如果SOF 和 EOF 之间收到 Invalid Dword Received 信息或 ERROR Received 信息,则该状态机要么:
a) 忽略无效字或 ERROR;或
b) 丢弃帧,向端口层发送帧接收(SMP 不成功)确认信息,向 SL 状态机发送请求中断信息,并终止该状态机。

如果收到 SMP 响应帧的 CRC Error Occurred(CRC 错误发生)消息,则该状态应丢弃 SMP 响应帧,向端口层发送 Frame Received(SMP 不成功)确认,向 SL 状态机发送 Request Break(请求中断)消息,并终止该状态机。
如果CRC没有错误发送一个 Request Close message给SL状态机。

2、SMP target:SMP_TP state
SMP_TP 状态机的功能是接收 SMP 请求帧,然后发送相应的 SMP 响应帧。
该状态等待 SMP 帧,并确定是否无差错(如无 CRC 错误)接收到 SMP 帧。

如果该状态在接收到 SOF Received 信息后,但在接收到 EOF Received 信息前又接收到 SOF Received 信息(例如,以 SOF、数据字、SOF、数据字和 EOF 代替 SOF、数据字、EOF、SOF、数据字和 EOF),则该状态应丢弃正在处理的帧。

接收的SOF和EOF之间的dword数量如果超过257个或少于2个,会报错,too long error或too short error。

如果SOF 和 EOF 之间收到 Invalid Dword Received 信息或 ERROR Received 信息,则该状态机要么:
a) 忽略无效字或 ERROR;或
b) 丢弃帧,向端口层发送帧接收(SMP 不成功)确认信息,向 SL 状态机发送请求中断信息,并终止该状态机。

如果收到 SMP 请求帧的 CRC Error Occurred 信息,则该状态应丢弃 SMP 请求帧,向 SL 状态机发送 Request Break 信息(见 6.18)并终止该状态机,否则该状态应向端口层发送 Frame Received(SMP 成功)确认信息。
该状态应通过向 SMP 发送机反复发送发送空闲字(Transmit Idle Dword)报文来请求发送空闲字。


总结

介绍了SMP的link层协议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值