基于53CF94 SCSI IC的目标设备无法处理发起端WRITE(10)命令
针对NCR 53CF94 + STM32 SCSI适配器WRITE(10)重复写入问题的排查方案
检查SCSI状态返回的阶段合规性
WRITE(10)多块写入场景下,单块传输完成后需返回INTERMEDIATE-GOOD状态(0x02),仅最后一块传输完成后返回GOOD(0x00)。若所有块都返回0x00,发起端会认为仅完成单块写入,进而重复发送第一块。验证NCR53CF94的命令流程完整性
- 数据写入SD卡完成后,必须先执行
FLUSH FIFO命令(命令码0x07)清空芯片内部FIFO,避免残留数据干扰后续传输。 - 状态返回需严格遵循SCSI阶段切换流程:数据阶段结束后,先向
COMMAND寄存器写入SEND MESSAGE命令(0x06),再将COMMAND COMPLETE消息(0x00)写入FIFO,触发消息发送。 - 完成所有操作后,务必清除53CF94
STATUS寄存器中的中断标志位,确保发起端能正确识别命令完成信号。
- 数据写入SD卡完成后,必须先执行
确认WRITE(10)块数量参数的处理
解析WRITE(10)命令CDB时,必须提取第7-8字节的块数量参数。若发起端要求写入多块,需持续响应数据请求直至所有块处理完成,而非仅处理单块后就返回完成状态。排查CRC校验配置
检查NCR53CF94的CONFIG1寄存器(地址0x11),确认CRC DISABLE位是否与发起端配置匹配:- 若PC端启用CRC校验,需确保53CF94未关闭CRC功能,且硬件链路能正确生成/返回CRC值;
- 若无需CRC,需同时在53CF94和发起端(DOS下可通过驱动配置)关闭CRC校验,避免因CRC不匹配导致发起端重试。
检查STM32中断逻辑
确认STM32对53CF94的所有中断(数据传输完成、命令完成、错误中断)都有完整处理,不存在中断丢失或未响应的情况。例如,数据传输完成中断触发后,需立即处理数据写入SD卡并进入状态/消息返回流程,不可延迟或遗漏。
内容的提问来源于stack exchange,提问作者CyberArtem
相关产品推荐
相关产品推荐

