LPC1857 USB1 port suspend

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

LPC1857 USB1 port suspend

1,202件の閲覧回数
vivienwong
Contributor I

Hi,

   I am trying to suspend the USB 1 port. The LPC1857 is the Host and I have a fingerprint module connected to USB1.

Here is my code and the chip hangs up (when I run in debug mode with LPC link, it shows that CPU is stalled when i run this code).

void USB1_ForcePortSuspend()
{
    // only set suspend bit if the port is currently enabled (PE bit set to 1)
    if (LPC_USB1->PORTSC1_H & (1 << 2))
    {
        LPC_USB1->PORTSC1_H |= 1 << 7; // Enable suspend bit

        // wait for port to suspend
        while (!(LPC_USB1->PORTSC1_H & (1 << 7)));

        vTaskDelay(1000);

        // now suspend the PHY Clock
        LPC_USB1->PORTSC1_H |= (1 << 23);

//         wait for the clock to suspend
        while (!(LPC_USB1->PORTSC1_H & (1 << 23)));

        vTaskDelay(10);
    }
}

Is there a recommended step to suspend the USB 1 port?

Just to add on that it is when i suspend the PHY clock that the CPU gets stalled.

Thanks!

0 件の賞賛
返信
2 返答(返信)

1,020件の閲覧回数
soledad
NXP Employee
NXP Employee

Hello Vivien, 

Let share my findings with you,  since you are using the LPC USB port as a Host,  then the device that it is going to be attach to the USB need to be first enter into Suspend Mode before you put the LPC USB host port into Suspend Mode, so first you need to see if the device connected to the HOST it is already in Suspend and then use your function with only

void USB1_ForcePortSuspend()
{

//FIRST CHECK IF DEVICE IT IS IN SUSPEND
    // only set suspend bit if the port is currently enabled (PE bit set to 1)
    if (LPC_USB1->PORTSC1_H & (1 << 2))
    {
        LPC_USB1->PORTSC1_H |= 1 << 7; // Enable suspend bit

 

        // wait for port to suspend
        while (!(LPC_USB1->PORTSC1_H & (1 << 7)));

 

        vTaskDelay(1000);

 

    }
}

 

Hope this clarifies

Have a nice day!

Best Regards,

Sol

1,020件の閲覧回数
vivienwong
Contributor I

Thank you!

0 件の賞賛
返信