资讯动态

SATA硬盘接入SAS背板:桥接芯片如何终结SCSI与ATA协议裂缝

发布时间:2026/10/26 14:43:59 来源:尧图企业网站定制
简介面向存储硬件工程师、嵌入式开发人员及数据中心方案选型人员Marvell 88SF9110B0 数据手册官方 PDF 完整提供 6Gb/s SAS 转 SATA 桥接芯片的关键技术信息。该芯片内置 600MHz ARM 处理器支持双端口 SAS 目标模式和一个或两个 SATA 主机端口能让普通 SATA 硬盘或 SSD 直接作为双端口 SAS 设备接入高可用性企业存储、数据中心、云存储和高性能计算系统。手册重点说明协议转换、内部 sector size 转换512/520/524/528 字节、XDREAD/XDWRITE/XPWRITE 命令、Write/Verify 命令以及 T10 保护信息模型DIF 字段验证/插入/删除等特性便于读者判断芯片在驱动器互操作、数据完整性和多点故障恢复方面的适配能力。整个资源为 1 个 PDF 文件仅 541KB轻量易查阅包含产品概述、关键特性与功能框图等内容框架。已有 383 人浏览学习适合需要快速评估 88SF9110B0 特性、进行 SAS/SATA 桥接方案选型或底层固件调试的工程师作为随时参考。1. SATA 硬盘插进 SAS 背板为什么必须隔着一颗桥接芯片SATA 硬盘插进 SAS 背板物理接口兼容很多工程师默认它就是一块能用的 SAS 盘。可上电之后才发现SAS 控制器说的是 SCSI 命令SATA 盘只认 ATA 命令协议层彻底分裂。这份 88SF9210/9110/9118 的 datasheet 里给出了一个反直觉的答案桥接芯片内放一颗 600MHz 的 ARM966 处理器让它站在数据路径上做实时协议翻译。于是单端口 SATA 盘被伪装成双端口 SAS SSP 设备扇区大小能翻成 520/524/528T10 保护信息能在数据流里插入、校验、剥离。搞懂这类桥片的关键不是背参数表而是想明白为什么协议翻译必须交给通用处理器——这颗 ARM 的位置决定了芯片的性能上限和功能边界也决定了工程师在选型、调优时能有多少余地。2. SAS 与 SATA 的协议裂缝为什么要让一颗芯片终结 SSPSAS 和 SATA 的关系常被一句「物理兼容」带过。连接器长得一样背板能插于是很多人想当然SAS 控制器总能直接管理 SATA 盘吧答案是不能直接管理只能绕路。要理解这颗桥为什么存在得先看清 SAS 与 SATA 在协议层到底裂在哪。2.1 物理层同源传输层分裂SSP 与 SATA 命令集的断层SAS 和 SATA 共享了串行传输的物理层遗产都是 8b/10b 编码都是差分串行链路SAS 2.0 时代的 6Gb/s 线速与 SATA 3.0 一致甚至 SATA 的 PHY 可以向下协商到 3Gb/s 和 1.5Gb/s 来兼容老盘。这也是为什么 SATA 盘能物理插入 SAS 背板——SAS 规范在设计时就留了兼容口子。但物理层的同源到此为止传输层的语言完全不是一回事。SAS 域里跑的是 SSPSerial SCSI Protocol帧里承载的是 SCSI 命令描述块CDB有 opcode、LUN、任务管理这类 SCSI 世界的概念。SATA 线上跑的是 FISFrame Information Structure承载的是 ATA 命令只有 port 和 LBA没有 LUN没有 abort task、LUN reset 这类任务管理原语。SCSI 的 READ(10) 和 ATA 的 READ DMA 虽然都指向「读一块数据」但命令格式、寻址方式、完成状态语义全不一样。SAS 控制器想指挥一块 SATA 盘等于让一个说 SCSI 的人和一个只说 ATA 的人对话中间必须有个翻译。这个翻译最初由 SAS 规范里的 STPSATA Tunneling ProtocolSATA 隧道协议承担SAS 控制器把 ATA 命令封装进 STP 帧经过 expander 转发expander 再把它翻译成 SATA 线上的 FIS。能通但只是「能通」。2.2 消除 STP企业存储拓扑里的关键取舍datasheet 里有一句容易被 skim 过去的话桥接芯片提供了「elimination of STP protocol, especially in configurations where SAS expanders are used」。为什么消灭 STP 是卖点因为 STP 在 expander 拓扑里是绕路通道带着三个结构性问题。第一是语义降级。SCSI 的命令体系里有大量 ATA 世界不存在的管理命令Mode Select、Mode Sense、Persistent Reserve、Send Diagnostic。企业存储的双控制器要协商缓存策略、锁盘、预留资源全靠这些命令。STP 通道的设计目标是搬 ATA 命令SCSI 管理命令在 STP 隧道里没有容身之处只能被丢弃或由 expander 软件模拟存储系统的管理面立刻残缺。第二是并发能力。STP 本质上是点到点隧道一个隧道服务于一个 initiator 和一个 target 之间的会话。高可用HA系统里两个 SAS initiator对应两颗存储控制器都想同时访问同一块盘STP 只能靠 expander 交替仲裁频繁建立和拆除连接每一次切换都有协议开销。越大的 expander 拓扑这种连接建立开销越明显。第三是 expander 资源占用。每个 STP 会话都要占用 expander 的路由表项和连接槽位大规模级联拓扑里这是稀缺资源。把一批 SATA 盘通过 STP 挂进 SAS 域等于让 expander 背着大量翻译负担。这颗桥的解法很干脆在 SATA 盘前面加一个翻译层SAS 侧以标准的 SSP target 设备身份出现把 SCSI 命令全部终结在桥内翻译成 SATA 命令后再用原生 SATA 协议发给盘。expander 看到的是一个普通 SSP 设备完全不知道背后是 SATA 盘。STP 从拓扑里被彻底移除expander 只处理 SSP拓扑管理和并发调度都回归简单的路径。2.3 桥的硬架构双 SAS 口、payload 缓冲与 ARM966从框图能看出这颗芯片的骨架两个 SAS 6Gb/s 物理口各自带 SAS Payload Buffer中间是 Header Queues旁边挂着 600MHz 的 ARM966 处理器另一侧是 SATA Payload Buffer 和一个或两个 SATA 6Gb/s 口。数据流大致是SAS initiator 发来 CDB → SAS 口收帧进 payload buffer → ARM966 从 Header Queues 里取命令解析、查表、决定路径 → 需要下发给盘的数据通过 buffer 之间的 DMA 通道搬运 → SATA 口组织成 FIS 发给盘。注意这里的分工ARM966 不碰逐字节的数据搬运那是 DMA 和 buffer 的活ARM 只在命令层做语义转换和调度。这个设计在后面讲设计取舍时是核心。芯片的型号差异也在这里分化88SF9210 带两个 SATA 口一颗芯片同时带两块 SATA 盘适合高密度 drive carrier88SF9110 带一个 SATA 口做单盘 dongle88SF9118 则换更小的 TFBGA 封装面向 2.5 寸盘。三颗芯片的 SAS 侧都是双端口差别全在 SATA 侧的密度和封装上。型号SAS target 端口SATA host 端口封装典型定位88SF92102210×10mm 84-pin QFN高密度载板一颗带两块盘88SF91102110×10mm 84-pin QFN3.5 寸盘 dongle 板88SF9118218×11mm 117-ball TFBGA2.5 寸盘 dongle 板这个「一颗芯片终结 SSP」的架构把协议复杂度收拢到桥的固件里。接下来要看的就是这颗 ARM966 到底在固件里处理什么。3. 600MHz ARM966SCSI 命令为什么必须由固件终结数据手册里有一句决定性的话内部处理器负责处理所有在 SATA 协议中没有对应功能的 SCSI 命令例如 Mode Select 和 Mode Sense。这句话透露了两个重要信息一是桥内确实有一个通用处理器在跑固件二是 SCSI 命令集的很大一部分要被「终结」在桥上而不是透传给 SATA 盘。3.1 命令分派哪些 SCSI 命令被终结在桥上SATA 世界的命令集很小核心就是读、写、刷缓存、TRIM、SMART 之类。SCSI 的命令集则大得多而且带有一整套管理面命令。桥的固件里通常维护着一张命令分派表按 opcode 分类处理。常见实现思路是能映射到 ATA 的块命令走翻译路径比如 READ(10)/WRITE(10) 翻译成 ATA READ DMA / WRITE DMASYNCHRONIZE CACHE 翻译成 ATA FLUSH CACHEUNMAP 翻译成 ATA TRIM不能映射的管理命令走本地终结路径由 ARM 自行构造应答。终结意味着命令到桥为止SATA 盘根本不知道它的存在。典型的三类终结命令InquirySATA 盘回的是 ATA Identify 信息SCSI initiator 要的是标准 Inquiry 数据。桥要用自己的固件构造厂商信息、设备类型、版本号必要时还要根据 SATA 盘的 Identify 数据生成能力位。Mode Select / Mode Sense这是最典型的终结命令。SCSI 的模式页体系在 ATA 里没有对应物桥必须自己维护一套模式页。Send Diagnostic诊断命令在 SATA 侧也没有等价物桥自己在本地跑自检返回结论。分派表之所以放在通用处理器上而不是硬逻辑里是因为命令集是开放的、可演进的。今天固件不认识的新 opcode明天发个新固件就能识别。硬逻辑查表做不到这种灵活度。这也解释了 datasheet 里「在线固件升级」为什么是核心特性——命令语义的演进全部靠固件承载。3.2 模式页模拟Mode Select 的数据落在哪里Mode Select 命令让 initiator 给磁盘设置参数比如写缓存开关、扇区大小、预读策略。SATA 盘没有模式页所以桥要在本地维护一组虚拟模式页。initiator 发 Mode Select 时ARM966 解析 CDB 里的页面数据更新本地模式页副本再把能在 SATA 侧落地的部分翻译成 ATA 命令下发比如用 ATA Set Features 设置写缓存、用 Set Sector Size 配置扇区。这里有一个被 datasheet 一句话带过但实际很重的点「preserve HW configuration information (e.g. Mode Select) across Resets and power loss」。Mode Select 设置的参数如果只在桥的 RAM 里掉电就丢了。所以桥要有一片 SPI Flash 保存配置和固件。重新上电后的初始化流程大致是ARM 从 Flash 加载配置 → 初始化 SATA 口与盘建立链接 → 用 ATA Set Features 把缓存策略等下发给盘 → 让 SAS 侧就绪。这样一个双控制器系统在路径切换后新控制器发 Mode Sense桥能一字不差地报出之前配置的模式页。这也解释了另一个现象桥芯片方案的复杂度一半在命令翻译另一半在状态持久化。SATA 盘本身没有状态管理的概念桥要为它补上整个 SCSI 管理面的状态机。3.3 错误语义翻译从 SATA 错误位到 SCSI sense错误处理是桥固件里最容易被低估的工作量。SATA 盘的错误模型很简单error register 里几个位表示 CRC 错、UNC不可恢复错误、IDNF扇区未找到之类。SCSI 的错误模型则是一棵大树sense key 分几大类下面还有 ASC/ASCQ 细分到几十上百种组合。桥必须把 SATA 侧的故障翻译成 SCSI initiator 能理解、能分类、能决定重试策略的 sense 数据。举一个具体路径SATA 盘在读数据时遇到介质错误置 UNC 位并返回 error FIS。桥收到这个错误后不能直接把它丢上 SAS 链路而要构造一条 sense 响应通常映射成 MEDIUM ERROR 这个 sense key附带 LBA 信息告诉 initiator「这一块数据坏了不是链路问题」。反过来如果是 SATA 链路本身 CRC 出错但盘还有重试能力桥要决定是让 SATA 口重试还是直接往 SAS 侧上报。datasheet 里那句「Well-defined Link layer and Transport layer error handling」背后是固件里异常路径的大头。链路层错误由 SAS PHY 的硬逻辑处理传输层的帧超时、credit 不足由传输层状态机处理并中断上报而命令层的错误语义翻译、重试策略、任务管理全部落在 ARM966 上。三层分工硬逻辑管快路径固件管语义路径。4. 数据路径的透明魔法扇区翻译、T10 PI 与 128 并发协议翻译解决的是「命令能不能通」数据路径要解决的是「数据过去之后还是不是原来那包东西」。SAS 世界和 SATA 世界的块格式并不一致SAS initiator 可能要求 520 字节扇区而 SATA 盘原生只有 512。再加上 T10 保护信息在数据流里的插入和校验这部分的处理完全透明于 SATA 盘是桥片真正体现技术含量的一章。4.1 扇区翻译520/524/528 字节如何映射回 512企业存储里的非 512 扇区不是玄学是为了让每个逻辑块多带一点附属信息。常见的对应关系是520 字节是 512 数据加 8 字节附属空间524 对应加 12 字节528 对应加 16 字节。这些附属字节可以放厂商元数据、块内标签或者 T10 保护信息。SATA 盘只认 512 字节物理扇区所以桥要把 SAS 侧的扇区格式翻译成 SATA 侧的扇区格式。映射机制可以这样理解SAS 侧收到一个 528 字节的逻辑扇区桥把前面的 512 字节数据拆出来下发给 SATA 盘后面的 16 字节附属信息按策略丢弃或暂存。读方向则反过来桥从 SATA 盘读回 512 字节数据拼上自己维护的附属信息凑成 528 字节返回给 initiator。真正复杂的是地址换算当 initiator 用 528 字节扇区访问逻辑块 LBA 1000 时对应 SATA 盘上的哪个物理块中间夹了多少附属字节必须由桥维护一张映射关系来计算。datasheet 里说「所有扇区翻译和映射由内部处理器完成对 SATA 设备透明」这句话的代价是固件里必须有一套完整的逻辑块到物理块的换算逻辑。这也是为什么扇区翻译会影响性能数据不是整块搬完就结束每个逻辑扇区都要拆装重组桥的 payload buffer 承担重排缓冲的角色。SAS 侧大扇区、SATA 侧小扇区的吞吐实际上是受限于桥内 buffer 的拆装能力而不是线速。4.2 T10 PI 三级流水verify、insert、stripT10 Protection Information 模型常说的 DIFData Integrity Field给每个逻辑块附加 8 字节保护信息2 字节 guard 用于数据完整性校验CRC 或 Internet checksum2 字节应用标签由上层应用自定义使用4 字节参考标签通常按 LBA 计算用来在读写时校验访问的是不是预期的那一块。datasheet 明确写了桥支持三种操作verified、inserted、deleted。verify 模式SAS 侧进来的数据流带 PI桥逐块校验 guard 和参考标签校验通过后把 PI 剥掉只把 512 字节数据下发给 SATA 盘。校验失败则返回 sense告诉 initiator 数据损坏。这样盘上存的是纯净数据PI 语义由桥在数据流经过时动态维护。insert 模式SATA 盘读上来的数据没有 PI桥根据当前 LBA 计算参考标签对数据区计算 guard生成 8 字节保护信息插入数据流再返回给 SAS initiator。写方向同理initiator 发来的数据带 PI桥把它拆掉、只下发数据区。strip 模式initiator 没启用 PI 但盘上数据带 PI通常不会出现更多是配置切换的过渡桥把 PI 字段剥除让数据流在 SAS 侧呈现为不带 PI 的形态。实现思路上PI 计算放在 DMA 搬运路径上最合理数据从 SAS payload buffer 流向 SATA payload buffer 的过程中硬件校验单元同步计算 CRCARM966 负责配置每一块的 PI 策略、处理校验失败的分支。如果让 ARM 逐字节算 CRC600MHz 主频也扛不住线速吞吐如果纯硬逻辑处理又无法覆盖 insert/strip 这样需要语义判断的模式。折中的做法是硬件加速校验、固件控制策略这也是 datasteet 里「保护信息字段可以被验证、插入或删除」这句话背后的典型分工。4.3 XDREAD/XPWRITE 与 Write Verify命令级语义解释扇区翻译和 PI 处理已经够复杂了这颗桥还额外支持 XDREAD、XDWRITE、XPWRITE 和 Write/Verify 命令。这些命令在原生 SATA 协议里完全没有对应物桥必须识别它们的 opcode理解其语义再翻译成 SATA 的普通读/写 DMA。XDREAD/XDWRITE/XPWRITE 这类扩展数据保护命令特点是 initiator 在命令里直接指定保护信息内容数据流里携带 PI 字段。桥的任务是把这些带 PI 语义的读写请求拆解落实为 SATA 盘能执行的简单块读写同时保持 PI 语义在桥内完成而不是透传给盘。Write/Verify 命令则要求在写入完成后立刻回读校验SATA 盘写完数据只回完成状态桥必须在命令层追加一次读操作确认数据正确后再向 initiator 返回状态。这类追加操作会占用队列槽位在并发场景下是实打实的性能开销但也正是因为桥有能力在命令层做这种语义解释企业存储系统才能在这些复杂命令上依赖 SATA 盘。4.4 128 并发 I/O双 initiator 下的队列调度数据路径的吞吐上限最终落在并发管理上。datasheet 给出的指标是每颗芯片支持 128 个并发 I/O、最多 32 个 SAS initiator、每个 SATA 口支持 32 个 outstanding 命令对应 SATA NCQ 深度。这几个数字构成一个多级队列系统SAS 侧的 128 个并发槽位是所有 initiator 共享的SATA 侧的 NCQ 深度是每个口独立的。桥的 ARM966 在中间做仲裁——谁的命令进队、谁的命令排队等待、队列满了是回 busy 还是让 SAS 链路做流控全部在命令层调度。双端口 active-active 的意义也在这里两个 SAS 口都可以随时接收 I/O不是主备切换的关系。系统里两颗存储控制器同时往一块盘发命令桥把两股流量汇合、仲裁再按 SATA 协议分发给盘。128 并发并不是为了让单颗控制器打满性能而是为了消化双 initiator 同时发来的负载避免 SAS 链路反复 busy 和重试。理解这一层再看后面的坑会清楚很多。5. 避坑排查SAS-to-SATA 桥接设计的五个经典翻车点桥接芯片不像主控那样被广泛调优很多坑埋在 datasheet 一两句话的角落。我按 现象 → 原因 → 解决 的方式列了五个真实场景里的高频问题供选型和调试时对照。5.1 520 扇区配 4Kn 盘两层翻译叠加现象把桥配成 520 字节扇区接的是一块 4Kn原生 4K 扇区SATA 盘格式化后写入的数据读回来错位SMART 信息却正常。原因桥的扇区翻译假设 SATA 盘是 512 字节物理扇区。4Kn 盘的物理扇区是 4096 字节盘内部本来就有一层逻辑块到物理块的映射。桥在逻辑层做 520 到 512 的拆装盘又在物理层做 512 到 4096 的合并两层翻译的边界没有对齐时跨物理扇区的写入会被盘拆分或合并导致桥维护的映射元数据与实际数据位置不一致。解决优先选用 512n 原生扇区的 SATA 盘如果必须用 4Kn 盘确认桥固件支持 4Kn 物理扇区下的映射并在格式化前用桥的诊断命令验证一次全盘写读回。别在出问题之后才查盘问题多半在桥的映射表。5.2 双 initiator 满载队列打满导致的 I/O 超时现象两个控制器同时跑业务压力上来后其中一侧开始报命令超时路径切换但切换后另一侧也出现短暂卡顿。原因128 个并发 I/O 槽位是全局共享的。双 initiator 都打到满队列时新命令只能在队列外等待。如果桥的回压机制没配置好比如该回 SAS BUSY 的时候没回而是让命令干等initiator 侧先等到了自己的超时阈值就判定路径故障。解决在存储控制器侧确认 SAS 的 busy/queue full 流控被启用别让命令无限排队同时检查桥固件是否开启了快速 failover 路径。压测时分开跑单 initiator 和双 initiator 两种场景先摸清芯片在双端口并发下的真实队列深度再定控制器的命令超时参数。5.3 在线升级掉电SPI Flash 写掉一半现象用图形工具升级桥固件中途断电或有人误触复位重新上电后桥完全没有响应SAS 端发现不了设备。原因SPI Flash 同时存放固件和配置升级流程通常是先擦除再写入。掉电正好落在擦除窗口时Flash 里既没有新固件也没有旧固件变成一块空白片。数据手册里「online FW upgrade」只说了支持在线升级没说的是升级过程对掉电零容忍。解决升级前确认桥的 bootloader 有保护分区最好能用双镜像A/B bank的固件布局升级过程中锁住电源和复位键养成「升级前先导出配置」的习惯让固件工具落一份配置快照出问题后至少能恢复参数减少重新配置的排查时间。5.4 T10 PI 校验失败参考标签没跟着 LBA 重算现象启用了 T10 PI 的 verify 模式后initiator 频繁报 guard 校验错误应用侧提示数据损坏但盘健康状态正常。原因参考标签是按 LBA 计算的而桥做了扇区翻译initiator 看到的 LBA 和 SATA 盘上的物理位置并不一一对应。如果桥固件在 PI 校验时直接用 initiator 给的参考标签去比对盘侧数据而扇区翻译改变了块的排列顺序guard 或参考标签就会对不上。另一种常见原因是桥上配置的是 insert 模式但 initiator 实际以 verify 方式发送数据桥又插了一遍 PI导致字段叠加错位。解决先在桥的诊断工具里做一次 PI 注入测试确认 verify/insert/strip 三种模式分别能通过再核对桥的扇区翻译配置与 PI 参考标签的计算基准是否一致。PI 报错先怀疑桥的配置层不要急着判盘故障。5.5 模式页丢失复位后配置不生效现象initiator 通过 Mode Select 设置了写缓存策略和扇区大小运行正常。某次盘复位或整机掉电后控制器发现桥的行为回到默认值缓存策略丢失。原因桥把模式页存在 SPI Flash 里但「跨复位保持」是有前提的——Mode Select 之后桥需要把配置写入 Flash 才能持久化。如果固件只在 RAM 里更新模式页、延迟写 Flash掉电窗口就会丢配置或者在掉电前的 Flush 流程里配置没来得及落盘。数据手册里「preserve across Resets and power loss」描述的是能力不是默认行为触发条件要看固件的持久化策略。解决上电后发一次 Mode Sense 确认桥实际生效的模式页再决定要不要重新 Mode Select验证桥固件的配置持久化时机必要时在稳定的维护窗口手动触发一次配置保存别依赖掉电瞬间的自动保存。6. 设计取舍600MHz 处理器站在数据路径上到底换来了什么整个 datasheet 看下来最值得反复琢磨的设计决策是为什么协议转换要交给一颗 600MHz 的通用处理器而不是纯硬逻辑状态机纯硬逻辑查表方案听起来更优雅——延迟确定、功耗低、不用写固件。但 SCSI 命令集是开放的、演进的。模式页体系、vendor specific 命令、T10 PI 的新变体这些都不是设计芯片时能固化成状态机的。一颗可升级固件的 ARM966让桥在部署之后还能通过更新固件支持新的命令语义这是硬逻辑方案给不了的能力。这颗处理器的位置同样关键。从框图看ARM966 不在字节搬运的主路径上而是在命令调度路径上。大块数据通过 payload buffer 之间的 DMA 通道搬运ARM 只负责解析命令、配置数据路径、处理异常。这个分工的本质是需要字节级吞吐的地方用专用硬件需要语义级灵活性的地方用通用处理器。这个范式在整个存储芯片领域反复出现RAID 卡上的协处理器、NVMe 转换芯片都是同一个套路。至于为什么 600MHz 而不是更高数据手册里那颗 1.10W 的功耗数字说明了答案——桥片是放在硬盘背板上的每瓦都算进散热预算。600MHz 处理 SCSI 命令分派已经绰绰有余加主频只增加功耗和发热不增加吞吐因为瓶颈从来不在 CPU 算力而在命令语义的复杂度和外部接口的排队。有次我评估一个桥接方案一开始盯着传输速率和并发参数反复对比忽略了固件跑在哪条路径上。后来把架构图里处理器位置圈出来才意识到这颗 ARM 的职责边界决定了整个方案的性能天花板和可维护性。从那以后我评估任何协议转换芯片的第一件事都是先找处理器的位置它在数据路径上还是控制路径上固件能不能升级命令集的扩展空间有多大。这三个问题比参数表里的数字更能决定一个方案能不能落地。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑