페이지

글목록

2016년 5월 2일 월요일

[PSOC] PSOC5 (CY8CKIT-059) 에서 USB 부트로더 5분만에 만들기

안녕하세요. 오랜만입니다.

아직도 엄청 바쁘군요. 프로젝트를 동시에 4개를 하다보니 전혀 시간이 안나네요.

잠깐 부트로더를 1개 만드는 중이라 만들면서 올립니다.

PSOC5 에서 USB 포트를 사용한 부트로더를 만드는 내용인데 정말 간단합니다.

먼저 PSOCCREATOR 를 실행하여, 새로운 프로젝트를 만듭니다.
Target Hardware 는 KIT를 사면서 깔아둔 프로그램에 의해 키트이름이 목록에 나와 있어서 선택하고요, 없으면 디바이스명으로 검색해서 선택하면 됩니다.(1만원이면 1개 사니까 사두시면 여러모로 공부하기 좋습니다. 저는 10개씩 디지키에서 삽니다. 사면 여기저기 사용하다보면 금방 다 떨어지네요.^^)


프로젝트를 만들때, 예제를 기반으로 만들어 봅니다. 예제에 부트로더가 들어있습니다. ^^


필터 검색란에 usb 를 치면 USBFS_Bootloader 가 있으니 선택하고 다음으로..

이름 적당히 정하고 퓌니쉬 눌러줍니다.


그러면 간단한 부트로더가 만들어집니다.

안고치고 쓰셔도 되지만, 이 프로그램은 처음 파워온 리셋 시, 10초동안 부트로더 프로그램이 동작합니다.
10초가 지나면 응용프로그램이 동작하는데, 이건 뭐... 어떨 때 보면 어머어마한 시간이죠.
사용자가 답답해 할 정도이니, 좀 고치죠.

물론 10초를 2초 정도로 고쳐도 됩니다. 그런데, 제가 많이 써 본 결과 2초내에 부트로더를 이용해 다운로드 시작을 해 줘야 부트로더가 동작하는데 좀 늦으면 다시 번거롭게 파워온 리셋을 시켜줘야 합니다.

그래서 준비한 것이 아무 버튼이나 하나 연결해서 버튼을 누르고 파워를 키면 바로 부트로더로 들어가고, 누르지 않고 파워를 키면 바로 응용프로그램을 시작하도록 하였습니다.
먼저 Topsch 를 다음과 같이 바꿉니다. ( 스위치 입력만 1개 추가)

그리고 main.c 에 다음의 코드를 추가합니다.
int main()
{
    /* Indicates that the bootloader is running. */
#if (CY_PSOC4)
    RGB_LED_ON_RED;
#else
    TURN_ON_LED4;
#endif /* (CY_PSOC4) */

if((Wait_Forever_Read() == 0/*Pressed*/) || (Bootloader_GET_RUN_TYPE == Bootloader_START_BTLDR))
{
Bootloader_SET_RUN_TYPE(Bootloader_START_BTLDR);
}
    /* Enters the bootloader to wait for the application update. */
    Bootloader_Start();

    /* Bootloader_Start() never returns. */
    for (;;)
    {
    }
}

아, 그리고 아까 topsch 탭에서 부트로더를 더블클릭하면 나오는 옵션에서, Wait Time 을 10초에서 적당히 작게 100ms 정도로 바꿔 주면 스위치를 누르지 않으면 응용프로그램이  즉시(100ms 후)에 실행 됩니다.


자.. 다들 5분 걸리시나요? ^^. 전 4분 걸렸습니다. 
으.. 시간이 없어서 곧 부트로더블도 설명해 보겠습니다. 부트로더블은 아마도 1분 걸립니다. ^^
하지만 글 쓰는 것은 20~30분 이상 걸리네요.

예제 프로젝트도 올립니다.

댓글 없음:

댓글 쓰기