写入命令处理程序必须检查短状态,以确保系统不再因之前的事务而繁忙,并检查是否发生任何错误。错误可能与当前命令事务或其他后台系统进程有关。图 3-5 介绍了使用短写入或批量写入协议的任何写入命令的命令处理程序流程。
有关短状态的更多详情,可以在节 8.2.87(主应用程序)和节 7.2.6(引导应用程序)中找到。此命令处理程序流程对两种应用程序都有效。
- 写入任意命令 - 根据特定命令的要求,使用短写入协议 或批量写入协议 写入所需的命令。记录为该命令选择的标签 (A)。
- 读取短状态 - 使用短状态读取协议 读取“短状态”。
- 紧急关闭?- 此“短状态”位指示是否发生了紧急关闭情况。如果发生这种情况,命令处理应停止,以便处理紧急关闭。如果发生这种情况,HOST_IRQ 信号也将触发。有关紧急关闭的更多信息,请参阅节 6.2。
- CmdTag == (A)? - 检查“短状态”是否包含与写入命令一起发送的标签。这表示命令由软件执行,无论命令是否成功。如果这与所需的标签 (A) 不匹配,请继续轮询“短状态”,直到标签匹配。
- 系统繁忙 | 请求正在进行中?- 检查是否设置了系统繁忙 或请求正在进行中 短状态位。如果设置了这些位,系统仍然在处理写入命令,且不应该发送新命令。如果设置了这些位中的一个,则继续轮询短状态,直到这两个位都被清除。
- COMM | CMD 错误?- 检查通信错误 或命令错误 短状态位。如果设置了任一位,则写入命令已失败。在这种情况下,应读取错误历史 以确定特定的错误详细信息。读取“错误历史”后,“错误历史”和“短状态”应在下一个事务之前清除先前的错误。然后,主机可以确定要执行什么操作,例如重新发送命令或重新启动系统。
- BIST | 运行错误?- 检查 BIST 错误 或运行错误 短状态位。如果任一位置位,表示后台进程出现错误。如果设置了任一错误位但未设置 CMD 错误位,则该错误与当前命令事务无关。这方面的一个示例是常规主应用程序轮询期间的温度传感器故障。在这种情况下,仍应读取“错误历史”以确定错误原因,但并不意味着当前的写入命令事务已失败。
请注意,只有命令错误 和通信错误 短状态位应视为命令失败。如果设置了 BIST Error 或 Operational Error 位,但未设置 Command Error 或 Communication Error 位,则另一个进程收到了错误,但命令仍已完成。