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.

[参考译文] TUSB9261DEMO:"安全擦除准备"和"安全擦除单元"命令无效。

Guru**** 2387660 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/667245/tusb9261demo-the-security-erase-prepare-and-security-erase-unit-commands-have-no-effect

部件号:TUSB9261DEMO
主题中讨论的其他部件:PMP

您好,

我已成功将这两个ATA命令发送到存储设备,首先是"安全擦除准备",然后是"安全擦除单元",但存储设备未被擦除。 可能是什么问题?

谢谢!

Amy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amy,您好!

    我们正在考虑您的请求。 我们将很快发送评论。

    此致,
    Roberto
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我发送了这两个命令,但100 % 不确定它们是否成功。 正在尝试设置以便我可以看到调试消息。 能否提供代码示例,说明如何发送这两个命令并验证它在您的设置中是否正常工作? 固件版本为TUSB926x_FW_v 1.05。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更多调试显示“安全擦除准备”命令已成功发送并完成。 但在发送“安全擦除单元”命令后,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,

    非常感谢您的建议! 请您澄清几件事吗?

    1.“安全擦除单元”命令具有512字节的数据负载。 将数据放入datapath_ram->wrap_window_memory_placeholder是否正确? 如果正确,bUseMemoryWrapWindow是否为真?

    2.我需要发送两个命令“Security Erase Prepare”(安全擦除准备)和“Security Erase Unit”(安全擦除单元)以完成安全擦除。 "安全擦除单元"使用PIO数据输出协议。 在发送此命令之前,我是否应该禁用"PIO设置端口中断"? 我对何时使用D2H_REGIS_FIS_INTR以及何时使用PIO_SETUP_FIS_INTR...感到困惑

    谢谢!
    Amy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1)是的,仍将数据放在那里,但设置为false。
    2)由于安全擦除单元是第二个命令,因此在发出该命令之前应重新启用INTR。 按照我提到的示例进行操作。

    此致,
    Brian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢,Brian!

    您能否确认我应该在此处触摸哪个中断,PIO_SETUP_FIS_INTR或D2H_REGIS_FIS_INTR? “安全擦除准备”没有数据加载,而“安全擦除单元”有。

    非常感谢!
    Amy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amy,您好!

    在发送非数据命令Erase Prepare之前禁用D2H。  然后在完成后重新启用。  使擦除单元保持启用状态。

    此致,

    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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amy,您好!
    SATA寄存器遵循SATA规范,因此您可以在SATA和AHCI规范中找到定义。
    此致,
    Brian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢Brian!