SAS协议详解:层次结构与术语概览

需积分: 10 13 下载量 19 浏览量 更新于2024-08-02 收藏 344KB PDF 举报
《串行连接SCSI (SAS) 协议架构概览》是一本由Rob Elliott撰写的入门级书籍,主要针对HP Industry Standard Servers的高级存储技术,特别是关于SAS(Serial Attached SCSI)这一行业标准接口的深入讲解。该书是基于SAS协议的分层结构,旨在帮助读者理解SAS协议的各个组成部分和工作原理。 1. **标准层次**:SAS协议遵循一套标准层次结构,从高层的SCSI应用层、ATA应用层到物理层,包括管理、服务提供商协议(SSP)传输层、串行总线协议(STP)传输层、SMP(Small Computer System Interface)传输层,以及SAS端口层、SSP链路层、STP链路层、SMP链路层和SAS链路层等。这些层次确保了协议的兼容性和可扩展性。 2. **物理链接与物理设备**:SAS物理链接采用光纤技术,提供高速数据传输,同时支持多种速率和电缆长度。物理设备包括控制器、硬盘驱动器和其他存储设备,它们通过SAS接口进行通信。 3. **端口和设备**:SAS系统包含多个端口,每个端口可以连接一个或多个SAS设备,如磁盘阵列、SSD或其他I/O设备。这些设备根据其功能可以是基本设备(如硬盘),也可以是扩展器设备,如集线器或交换机。 4. **域和边缘扩展器设备集**:SAS系统划分为多个逻辑域,每个域内有独立的数据路径。边缘扩展器设备集用于将多个物理链路组合成一个更大的逻辑连接,实现多路复用和冗余。 5. **路径和连接**:在SAS架构中,数据传输路径和连接方式涉及到物理连接的配置,包括路径选择算法,确保数据高效地从一个设备流向另一个。 6. **SAS地址和重置序列**:每个SAS设备都有唯一的地址,用于标识和寻址。重置序列是初始化设备过程中的关键步骤,确保系统正确启动并达到一致的状态。 7. **状态机和传输数据路径**:状态机模型描述了设备操作的控制流程,包括数据发送、接收、错误检测和处理等。传输数据路径定义了数据如何在这些状态之间流动。 8. **扩展器设备模型**:扩展器设备负责管理多个连接,可能涉及数据包转发、错误校验和负载均衡等功能,对整个系统的性能和可靠性至关重要。 《SerialAttachedSCSI Architecture》提供了详尽的SAS协议基础概述,有助于理解这个高性能存储技术的关键要素,并为IT专业人员在实际应用中设计、配置和维护SAS系统提供宝贵的参考。

#include "lib_prot_pd.h" #include "mod_input_output.h" #include "mod_display.h" #include "mod_queue.h" #include "app_typec_deal.h" #include "app_init.h" #include "lib_multi_protocol.h" uint8_t typeca_ufp= 0; void typeca_hard_reset_cb(void) { static uint8_t b_typec_hard_reset_lock= RESET; if(h_pd.output.b_source_read_hard|| \ h_pd.output.b_sink_read_hard) { if(b_typec_hard_reset_lock== RESET) { b_typec_hard_reset_lock= SET; mod_queue_send(PLUG_CA_RST_P); } }else { if(b_typec_hard_reset_lock) { b_typec_hard_reset_lock= RESET; mod_queue_send(PLUG_CA_RST_N); } } } void typecb_hard_reset_cb(void) { static uint8_t b_typec_hard_reset_lock= RESET; if(h_pd.output.b_source_read_hard|| \ h_pd.output.b_sink_read_hard) { if(b_typec_hard_reset_lock== RESET) { b_typec_hard_reset_lock= SET; mod_queue_send(PLUG_CB_RST_P); } }else { if(b_typec_hard_reset_lock) { b_typec_hard_reset_lock= RESET; mod_queue_send(PLUG_CB_RST_N); } } } void typeca_pr_swap_cb(void) { static uint8_t b_pd_power_role_swap_lock; if(h_pd.output.b_pr_swap_en) { if(h_pd.output.b_source_read_pr_swap) { b_pd_power_role_swap_lock= SET; /*用户代码*/ //关 VBus }else if(h_pd.output.b_sink_read_pr_swap) { /*用户代码*/ //DC-DC 进入放电状态,升压,打开 VBus } }else { b_pd_power_role_swap_lock= RESET; } } void typecb_pr_swap_cb(void) { static uint8_t b_pd_power_role_swap_lock; if(h_pd.output.b_pr_swap_en) { if(h_pd.output.b_source_read_pr_swap) { b_pd_power_role_swap_lock= SET; /*用户代码*/ //关 VBus }else if(h_pd.output.b_sink_read_pr_swap) { /*用户代码*/ //DC-DC 进入放电状态,升压,打开 VBus } }else { b_pd_power_role_swap_lock= RESET; } } bool typeca_vbus_exist_cb(void) { //判断一下0.8V VBus电压 return mod_io_typeca_acin(); } bool typecb_vbus_exist_cb(void) { //判断一下0.8V VBus电压 return mod_io_typecb_acin(); } void typeca_attached_src_cb(void) { /** * !!! * 兼容性测试需要 */ mod_io_a1d_out(); mod_queue_send(PLUG_CAD_IN); } void typecb_attached_src_cb(void) { mod_io_a1d_out(); mod_queue_send(PLUG_CBD_IN); } void typeca_attached_snk_cb(void) { mod_queue_send(PLUG_CAC_IN); typeca_ufp = 1; } void typecb_attached_snk_cb(void) { mod_queue_send(PLUG_CBC_IN); typeca_ufp = 1; } void typeca_unattached_cb(void) { mod_queue_send(PLUG_CAX_OUT); typeca_ufp = 0; } void typecb_unattached_cb(void) { mod_queue_send(PLUG_CBX_OUT); }

2023-06-06 上传