主题中讨论的其他部件:PMP
您好,
我已成功将这两个ATA命令发送到存储设备,首先是"安全擦除准备",然后是"安全擦除单元",但存储设备未被擦除。 可能是什么问题?
谢谢!
Amy
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
我已成功将这两个ATA命令发送到存储设备,首先是"安全擦除准备",然后是"安全擦除单元",但存储设备未被擦除。 可能是什么问题?
谢谢!
Amy
更多调试显示“安全擦除准备”命令已成功发送并完成。 但在发送“安全擦除单元”命令后,AHCI_WAY_COMPLETE()返回STATUS_TIMEOUT,即使超时设置为60秒。 命令的设置如下所示:
//设置缓冲区
TI_memset (&ata_cmd,0,sizeof(ata_cmd));
ti_memset((void*)datapath_ram->wrap_window_memory_placeholder,0512);
ti_memset((void*)datapath_ram->wrap_window_memory_placeholder,0x01,1);
//填充ata命令
ATA_CMD.FIS.FIS_TYPE = H2D_REGIS_FIS_TYPE;
ATA_CMD.FIS.CRRR_PMP = 0x80;
ata_cmd.fis.command = ATA_security_erase_unit;
ATA_cmd.bIsWriteCmd =真;
ATA_cmd.bUseMemoryWrapWindow =真;
ata_cmd.dDataByteCnt = 0x200;
//发送命令并等待完成,但永远不会完成
此 命令设置有什么问题? 什么可能导致命令无法完成? 对于“Security Erase Prepare”命令,我应该禁用/启用D2H寄存器端口中断还是“PIO设置端口中断”?
谢谢!
Amy
Amy,您好!
我们无法提供对自定义FW的大量支持 ,而且 我们从未 测试过这些特定 命令。 我唯一能提供的指导就是这一点
bUseMemoryWrapWindow应为false;
D2H和PIO中断应已启用。 如果必须为一个SCSI命令发送多个ATA命令,则需要禁用D2H中断启用并等待完成。 然后在发出最后一个命令之前重新启用中断。 有关示例,请参考scsi_handle_start_stop_unit()。
此致,
Brian
您好,Brian,
发送两个erase命令后,我能够收集一些调试消息:
[0000039296]-> AHCI_build_cmd()- cmd_slot = 0。
[0000039296]-> AHCI_Issue_cmd()- P0,cmd_slot =0,queued_cmd =0。
[0000039297] AHCI P0IS = 0x0.0001万,IE = 0x790.0005万f。
[0000039297]-> AHCI_Handl_d2h_reg_FIS()
[0000039297] PRD byte_cnt = 0。
[0000039324]-> AHCI_REGISTER_ATA_callbacks()- 0x800.8985万,0x80.0892万f,0x0万。
[0000039324]-> AHCI_REGISTER_PORT_INIT_COMPLETE_callback()- 0x800.8431万。
[0000039325]-> AHCI_REGISTER_ATA_callbacks()- 0x800.8985万,0x80.0892万f,0x0万。
[0000039325]-> AHCI_REGISTER_PORT_INIT_COMPLETE_callback()- 0x800.8431万。
[0000039500]-> AHCI_build_cmd()- cmd_slot = 0。
[0000039500]-> AHCI_Issue_cmd()- P0,cmd_slot =0,queued_cmd =0。
[0000039501]-> AHCI_WAY_COMPLETE()-剩余9999毫秒等待地址[0xfb0.0138万]= 0x0万。
[0000039501]安全擦除准备已成功发送!
[0000039501]-> AHCI_build_cmd()- cmd_slot = 0。
[0000039501]-> AHCI_Issue_cmd()- P0,cmd_slot =0,queued_cmd =0。
[0000039501] AHCI P0IS = 0x4000万,IE = 0x790.0005万f。
[0000039501]-> AHCI_GET_TFD_INFO ()- P0TFD = 0x451。
[0000039501] AHCI任务文件错误! P0TFD错误= 0x04,状态= 0x51。
[0000039501]-> AHCI_GET_TFD_INFO ()- P0TFD = 0x451。
[0000039501]-> AHCI_FATAL_ERROR_REACI()
[0000039501]-> AHCI_STOP()
[0000039501]-> AHCI_WAY_COMPLETE()-等待地址[0xfb0.0118万]= 0x0万的剩余时间为2000毫秒。
[0000039501]-> AHCI_START()
[0000039502]-> AHCI_WAY_COMPLETE()-剩余9999毫秒等待地址[0xfb0.0138万]= 0x0万。
[0000039502]已成功发送安全擦除设备!
看起来AHCI出现任务文件错误。 P0TFD是否由SSD更新? 您是否知道值0x451的含义?
谢谢!
Amy