페이지

글목록

2016년 3월 5일 토요일

[MSP430] CC430Fxxxx RF_kit(전자 손목시계) 구입

MSP430을  손 뗀지가 한참 오래됐는데,

다시 사용해 볼 기회가 왔네요.

이번에 RF Test 키트를 하나 구입했습니다.
이 RF 통신은 주파수 대역이 315/433/868/915 MHz ISM/SRD bands 에서 사용할 수 있습니다.

모델이 여러가지가 있는데, 구버전이 chronos Black 이라 하고, 
최근에 나온 버전이 chronos White 라고 합니다.
저는 구버전을 구입했는데, 이유는 Access point 가 좀 더 단순한 구조로 되어 있길래 구버전을 선택했습니다.


가격은 $58 입니다.

이 개발키트는 크게 3가지 제품으로 구성되어 있습니다.
1. 시계 (CC430F6137 + 3축 가속도 센서 + 온도센서 + LCD)
2. USB MSP430 DEBUGGER (MSP430F16x + TUSB3410UF)
3-1. Black Access Point (CC1111 : RF Transceiver + 8051 + USB 2.0)
3-2. White Access Point (CC1101 : RF Transceiver , MCU : MSP430F5509 + USB 2.0)

위에서 Access Point 구성품 블랙이 1 칩, 화이트는 2칩으로 되어 있습니다.
USB 2.0 포트가 없어서 화이트에서 CCMSP430F5137 를 사용하지 않은 것으로 판단 됩니다.
아마도 곧 USB 버전이 나오면 바뀔 것 같습니다.


아직 제품이 도착하지 않아서 메뉴얼만 읽어 보고, 사용 방법을 숙지해 봤습니다.
USB Debugger 는 그냥 USB 에 연결해서 사용하는 Programmer/Debugger 입니다.
실제로 서로 연결해서 사용하는 장치는 Access point 와 시계 입니다.
시계 모듈에 프로그램 다운로드하는 방법은 Access Point 에서 무선으로 데이터를 날려서 합니다.(Wireless Download)

오늘은 이정도로 마치겠습니다. 앞으로 해야할 것이 많으니, 그 때 다시 다루기로 하죠. 

2016년 3월 3일 목요일

[dialog] DA14580 boost mode FLASH/DEBUG/RESET

어제 부스트 모드의 동작 및 JTAG 연결, 회로도 등에 대해서 궁금한 것이 있어서,

다이얼로그사에 기술지원 메일을 보내서 얻은 답변을 공유합니다.

먼저 저의 질문은 다음과 같습니다.
이번에 1.5V 알카라인 밧데리를 사용하는 보드를 검토하는 중인데,몇 가지 질문사항이 있습니다.

1.     전원이 1.5V 이므로 SPI FLASH 메모리는 사용할 수 없겠죠부스트 모드 에서는 OTP 만 사용하는 것으로 보면 되나요?
2.     JTAG 로 프로그램을 다운로드할 때JTAG VBAT은 어떻게 연결해야 하나요? (VBAT1V  VBAT3V 중 어디에 연결해야 하는지회로도 PDF로 첨부합니다. VBAT3V에 연결하는 것으로 보이지만 검토 부탁 드립니다.)
3.     DA14580을 부스트 모드에서 Product Line Tool 을 사용하고자 할 때에도VBAT은 어떻게 연결해야 하나요? (VBAT1V / VBAT3V ? )
4.     Product Line Tool 이나 JTAG  DA14580 을 연결할 때RESET 핀을 연결해야 하나요? (지금까지 연결을 안하고 다운로드 했었는데필요 없다면 핀을 외부로 빼지 않을 생각입니다만..)



답변 내용 입니다.
1.     전원이 1.5V 이므로 SPI FLASH 메모리는 사용할 수 없겠죠부스트 모드 에서는 OTP 만 사용하는 것으로 보면 되나요?

è     Boost mode 사용 하시더라도 따로 S/W I/O 전압을 1.8V 변경하지 않으시면 DA14580 3.0V 전원이 됩니다입력 전원만 1.5V  사용 Boost  거쳐 DA14580 필요한 3.0V 전압을 생성합니다.
è     아무래도 입력전원이 1.5V 이므로 Flash memory 용도로 따로 외부에 boost  convertor 단품을 추가 하셔야   같습니다.
è     아니시면  입력 전압이 1.8V  Flash memory 단품을 이용하시고,  DA14580 I/O 1.8V setting 하셔서 사용하는 것도 방법이   있을  같습니다.     

2.     JTAG 로 프로그램을 다운로드할 때, JTAG VBAT핀은 어떻게 연결해야 하나요? (VBAT1V  VBAT3V 중 어디에 연결해야 하는지회로도 PDF로 첨부합니다. VBAT3V에 연결하는 것으로 보이지만 검토 부탁 드립니다.)

è     앞에 말씀 드린 대로 DA14580 boost mode 사용 하셔도 1.8V S/W setting 변경하지 않으시면 DA14580 3.0V 입니다.   
è     기존 Buck mode 대로 JTAG pad  3.0V 동일 합니다.

3.     DA14580을 부스트 모드에서 Product Line Tool 을 사용하고자 할 때에도, VBAT핀은 어떻게 연결해야 하나요? (VBAT1V / VBAT3V ? )

à Boost mode로도 모두 지원 가능합니다.

4.     Product Line Tool 이나 JTAG  DA14580 을 연결할 때, RESET 핀을 연결해야 하나요? (지금까지 연결을 안하고 다운로드 했었는데필요 없다면 핀을 외부로 빼지 않을 생각입니다만..)

è     간혹 Reset  필요한 경우가 있을  있으므로 RESET  Pin 외부로 배선 부탁 드립니다

[dialog] DA14583 은 BOOST Mode 를 지원하지 않습니다.

오늘 아이디어가 좀 떠올라서, 부스트 모드를 알아보다가 
최근 회로설계한 DA14583 에 부스트 모드를 구현하려고 메뉴얼을 찾아 보니
DA14583은 부스트 모드를 아예 지원하지 않는군요.

이것은 아마도 내부 FLASH 메모리의 전력 소모량이 많아서 그럴 것 같습니다.

메뉴얼의 "3.9 POWER MANAGEMENT" 에 다음과 같이 써 있습니다.
The Power Block of the DA14583 only supports the use of Lithium coin cells (2.35 V to 3.3 V) as external
battery. The connection diagram is shown in Figure 6.



그림6 을 보면 벅컨버터만 나와있고, VBAT1V 는 GND에 붙어 있습니다.

리튬 코인 전지만 지원하고 그 이하인 1.5V 나 1.2V 전지는 지원하지 않는다는 것이죠. 
즉 부스트 모드를 지원 않는다는 말이지요.

[DA14583(DA14580+SPI 1Mbit FLASH) POWER Supply]


내친김에 다른 다이얼로그 칩 파워모드도 알아 보겠습니다.

다른 DA1458x 시리즈는 모두 부스트 모드까지 지원하네요.


[DA14580 POWER Supply]


[DA14581 POWER Supply]


[DA14582(DA14580+SC14439) POWER Supply]

[RAS] 라즈베리파이 샀습니다. ^^

연말 정산으로 세금 환급 받아서, 여유가 좀 생겨서 바로 [라즈베리파이-2] 를 샀습니다.

이것은 엘레파츠에서 73,400 원에 팔고 있습니다. 

으악~~~~1!!   이런 이런 .. 잘못 샀다. ㅜㅜ

아.. 똑같이 생겨서 라즈 1 B+ 를 샀네요. 

라즈 2 B 를 샀어야 했는데. 아이~x. 


아뭏튼 제가 사려고 했던 [라즈 2 B] 는 가격이 73,400 원 이고,



잘못 산 [라즈 1 B+] 는 가격이 65,000 원 입니다.



성능의 차이는 다음과 같습니다. ( 아후.. 이걸로 기본 공부나 해야겠습니다)


아~ 내가 왜 이런 실수를.. ㅜㅜ


처음 도착한 택배를 뜯어 보니, 다음과 같이 이쁜 케이스가 나왔습니다.


안에 들어있는 내용물은 다음과 같습니다. 푸짐합니다. (계속 맨붕이네요. ㅜㅜ)


필요한 것들만 모아서 조립한 모습입니다. 일단 전원을 넣어 봤는데 아무 일도 없군요.
아마도 SD-CARD 에 운영체제를 구워 넣지 않아서 그런거겠죠?

예전에 샀던 으로 하나하나 공부해 보겠습니다. 
아.. 계속 맘 아푸다~ㅜㅜ

[PSOC] PSOC4 CAPSENSE PROXIMITY Widget 영상

이번에, PSOC4 로 doorlock을 개발하면서 터치 센서를 다루게 되었습니다.

현재는 회로 설계를 하면서 자료를 모우는 단계입니다.

기능 중, Proximity 라는 재밌는 기능이 있더군요.

사람이 가까이 가면 꽤 먼 거리에서 CAP SENSE 로 인식을 하는 기능으로,
백색 가전에서 사람이 가까이가면 LED가 켜지는 용도로도 쓰입니다.

관련 동영상을 링크합니다.
이 영상의 출처는 다음과 같습니다.
이 영상은 PSOC4 BLE 를 이용해서 스마트폰 앱에서 모니터링 할 수 있게 구성되어 있군요.

나도 앱을 해보고 싶은데 능력이 안돼네요. ㅜㅜ


Cypress 에서 Proximity Kit 도 나와 있습니다. 
PSOC의 CAPSENSE 기능 중, 제스쳐 와 proximity 기능을 테스트 할 수 있습니다.


PCB 상에 둥그렇게 패턴을 그려서 PSOC의 CAPSENSE 입력으로 넣으면,
영상으로 볼 때, 약 5~10 cm 거리 정도는 안정적으로 감지하는 것 같습니다.

다음은 키트의 내부 TOP 패턴 입니다. 4개의 Gesture 용 패턴과 Shield , Proximity 패턴이 보입니다.

총 6개의 CAPSENSE 를 사용했습니다.



다음은 키트의 실제 동작 테스트 영상입니다.

2016년 2월 27일 토요일

[PSOC] PSOC4 GPIO Interrupt Component SCH

이번에는 PSOC4의 GPIO 인터럽트 테스트를 해봤습니다.

PSOC4 GPIO Interrupt 는 핀 내에 Fixed 된 인터럽트가 3가지 있습니다.
1. Rising Edge
2. Falling Edge
3. Both Edge

즉 Edge 트리거만 지원하는군요.

포트 에서 인터럽트 타입을 선택하면 GPIO 콤포넌트에 irq 출력 핀이 1개 나온다.

이 핀에 인터럽트 콤포넌트를 붙여 줘야하고, 인터럽트 콤포넌트에서 다시 다음의 3가지 타입의 입력을 선택한다.
1. DERIVED : 연결된 콤포넌트의 인터럽트 방식은 그대로 가져다 쓴다.
2. RISING EDGE : 연결된 콤포넌트의 인터럽트 펄스 출력의 RIGING EDGE 에서 인터럽트 발생.
3. LEVEL : 연결된 콤포넌트의 HIGH LEVEL 에서 인터럽트가 반복적으로 걸림


여기까지 진행해야 인터럽트 동작 준비가 끝난다.

이번 회사 프로젝트에서는 Level 트리거가 필요한데, 인터럽트를 1개 더 추가해야했다.


현재까지 다른 방법을 찾지 못했네요. 혹시 이 방법 외에 LEVEL 트리거를 할 수 있는 방법 아시는분~ 손?
LEVEL 트리거 인터럽트는 무조건 HIGH LEVEL 에서만 걸리므로 LOW LEVEL 에서 걸리도록 하려면,
UDB 소자인 INVERTER(NOT) 를 1개 추가해야 한다.

[PSOC] PSOC4 LOW Power Mode Test

현재 진행중인 프로젝트가 NFC 카드에 PSOC4를 넣어서 전원이 무지무지 딸립니다.

전력을 아끼기 위해서 LED 키는데도 조심해야하고, 클럭도 낮췄습니다.

하여간 조금이라도 쉬는 때에 NFC 안테나를 통해 전력을 모아야 했습니다.

그래서 다루게 된게, Sleep Mode입니다.

PSOC4는 Low Power 모드가 총 4가지 있습니다.
1. Sleep Mode
2. Deepsleep Mode
3. Hibernate Mode
4. Stop Mode

----

각 모드마다, 특징이 있는데 먼저 일반적으로 우리가 사용하는 모드를 Active Mode라고 합니다.
저전력 모드는 다음과 같은 특징을 갖습니다.
1. Sleep Mode 는 모든 다른 기능은 살아있고 CPU만 죽어 있습니다.
2. Deepsleep Mode는 CPU,대부분의 Peripheral,HF Clock 등을 사용할 수 없습니다.
3. Hibernate Mode 는 모든 clock이 죽어있고, 로직 상태는 그대로 유지됩니다.
4. Stop Mode는 모두 죽어있고, GPIO 상태만 유지되어 있거나 Frozen 상태로 됩니다.

Frozen : 모든 GPIO 의 설정,모드,상태가 lock 된다. active 모드로 재진입하여 pins이 unlock 되기 전까지 GPIO 상태를 바꿀 수 없다.

[파워 모드 스펙]


[파워 모드 - 이용 가능한 리소스들]

[파워 모드 테스트 소스 코드]
int main()
{
    CyGlobalIntEnable; // Enable global interrupts. 
    //CySysPmSleep();
    CySysPmDeepSleep();
    //CySysPmHibernate();
    //CySysPmStop();
    while(1);
}

실제로 NFC 안테나를 통해서 전력을 공급받는 회로에서 , 각 파워 모드당 오실로스코프로 VCC를 측정해본 결과 다음과 같습니다.
그런데, Hibernate Mode 와 Stop Mode 가 오히려 전력이 떨어지는 것은 아직 이유를 못 찾았습니다. 뭔가 실수가 있을 것 같은데, 나중에 알게 되면 업데이트 하겠습니다.

DEEPSLEEP 모드가 가장 좋게 나오네요. 일단은 SLEEP 모드보다는 DEEPSLEEP 모드가 좀 더 성능이 좋습니다.
실제로 제가 쓰려고 했던 모드는 SLEEP 이나 DEEPSLEEP 모드입니다. 다른 모드들은 Wakeup 시 시간이 너무 길고, 결정적으로 시스템 리셋이 되 버립니다.


[클럭당 DEEPSLEEP 모드의 전력 비교]

2016년 2월 17일 수요일

[PSOC5] clock 은 어떤 역할을 할까?

PSOC_5LP 개발보드(CY8CKIT-059)에서,

Counter 동작 테스트를 해 보다가, clock이 도대체 어떻게 쓰이는 걸까? 하는 궁금증이 생겨 직접 테스트를 해 봤습니다.

counter 의 동작 조건은 다음과 같습니다.


카운터는 10까지 세면서, 다운카운터이고, 9보다 작은 (Less than) 조건에서 comp 신호가 출력된다.

다음은 clock 신호를 2가지의 경우에서 동작시켜본 실험 결과이다.

첫번째는 count 와 같은 Rising 시점으로 테스트 해 봤고, 두번째는 count 신호에 clock 신호를 반주기 뒤로 밀어서
테스트 해 본 내용이다.

1. count 와 같은 Rising 시점으로 테스트


2. count 신호에 clock 신호를 반주기 뒤로 밀어서 테스트

2 번과 같은 타이밍이 적합한 것 같다.. 아니면 clock 의 주파수를 count 주파수보다 좀 더 빠르게(2배 이상)으로
입력해 주면 괜찮을 듯 하다.
 

2016년 2월 16일 화요일

[PSOC5] cy8ckit059 개발 키트 구입

개발 키트를 구입했습니다. 단돈 1만원인데요. [링크]

하지만, 미국이라 Fedex Economy로 배송료가 2.5만원이네요.

친구들이랑 같이 여러개 구입하면 쌀 것 같습니다. ㅎㅎ 그래도 디버거랑 같이 있는데 1만원이라니. 

2개의 파트로 분리해서 사용 가능.. 디버거는 두고두고 쓸 수 있죠. 디버거 개별로 사면 이 키트보다 더 비쌉니다. ^^


다음은 핀 맵 입니다.


 [Target 회로도]
 [Kitprog(디버거) 회로도]

[Target 보드 전체 회로도]

[Kitprog(디버거) 전체 회로도]

2016년 2월 15일 월요일

[PSOC5] Cypress PSOC-5LP 선택

ARM-CORTEX-M3 계열인 Cypress PSOC-5LP에 대해서 다뤄 보겠습니다.

Cypress 의 전체 Microcontroller 제품의 포트폴리오는 다음과 같고, 이번에 다룰 제품은 이 중에서 PSoC 5LP 입니다.



PSOC-5PL 모델은 크게 또 4가지로 나눠집니다.
1. CY8C52xx
2. CY8C54xx
3. CY8C56xx
4. CY8C58xx

각각의 모델별로 Ordering Information 은 다음과 같은데, 이 정보가 가장 제품을 선정하는데 간편하게 되어 있는 것 같습니다.

1. CY8C52xx (Ordering Information)


2. CY8C54xx (
Ordering Information)


3. CY8C56xx (Ordering Information)

4. CY8C58xx (Ordering Information)

2016년 2월 14일 일요일

[PSOC4] BLE Pioneer Kit(CY8CKIT-042-BLE) H/W 구성

ypress의 BLE Pioneer Kit(CY8CKIT-042-BLE)를 간단히 소개합니다.

얼마 전에 Cypress 사의 블루투스 관련 개발용 키트 교육에 참가해서 이 보드를 공짜로 받았습니다.

이 보드는 크게 2부분으로 되어 있습니다.

PSoC5LP 라는 Cortex-M3 계열의 MCU인 CY8C5868LTH-LP039로 구성된 Programmer and Debugger 와
PSoC4 라는 Corte-M0 계열의 xCY8C4247LQI-BL483로 구성된 PSoC4 BLE Module로 구성되어 있습니다.

[ Programmer and Debugger ]
[ PSoC4 BLE Module ]


그리고 추가로 다음과 같은 구성품이 있습니다.
PC의 USB 2.0 포트에 붙여서 블루투스 통신을 연결해 주는 동글이 있는데,
이 동글의 하드웨어 구성은 또한 CYBL10162-56LQXI MCU를 콘트롤하는 
디버거와 프로그래머가 붙어있는 형태로 되어 있어 CYBL10162-56LQXI MCU를 프로그램 변경 가능합니다.

[ USB 블루투스 동글 ]


또 옵션으로 PSoC4 BLE Module 보다 성능이 떨어지고 가격이 저렴한 블루투스통신 모듈인 PRoC BLE Module이
들어 있습니다. Cortex-M0 코어인 CYBL10563-56LQXI로 구성되어 있습니다.

PRoC BLE Module ]
이 보드의 연습 목적은 PSoC4 BLE Module 이나 PRoC BLE 모듈의 프로그램 및 디버깅 입니다.
PSoC5LP MCU를 프로그래밍 하려면 또 다른 디버깅 툴이 있어야 하고, JTAG 콘넥터가 납땜되어 있지않기 때문에
맞는 콘넥터와 프로그램 및 디버거를 구입해서 테스트 해 봐야 합니다.

하지만 프로그램을 고치게 되면 현재의 기능인 프로그램 및 다운로드 기능을 잃게 되니 
이 보드는 BLE 모듈 을 테스트하는데에만 사용하고, PSoC5LP 를 연습하려면 050개발키트를 구입하는 것이 낫겠습니다.



전체적인 개발 환경 구성은 다음과 같습니다.

[dialog] SUOTA Update at DSPS Profile-2

SUOTA 는 2가지 방법으로 제공됩니다.
 Scheme 1: The secondary bootloader is stored in the external non-volatile memory. (SPI/I2C Flash Memory)
 Scheme 2: The secondary bootloader is burnt into the internal OTP.

저는 이중에서 Scheme 1 을 사용했습니다.

먼저 다음의 SDK5.03에 있는 디렉토리의 secondary bootloader 프로젝트를 엽니다.
D:\..\DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\utilities\secondary_bootloader\secondary_bootloader.uvprojx

컴파일하면 secondary_bootloader.hex 파일이 나옵니다.
기본으로 SPI 메모리와 security Mode 는 No security 로 되어 있는데, 그냥 이 옵션으로 하겠습니다. 자세한 내용은 넘어갑니다.

하드웨어는 dialog Basic Kit로 하겠습니다.
따라서 점퍼셋팅은 SPI Flash 를 사용하도록 셋팅합니다. 저는 추가로 디버그용으로 UART Txd 핀을 1개 더 연결했습니다.



Scheme 1 으로 SUOTA를 구성했을 때, 메모리맵 구조는 다음과 같습니다.


잘 안보이는데, AN-B-010 문서의 10 페이지를 찾아 보십시요.

나중에, DSPS 이미지를 0x13000 어드레스 영역에 SUOTA로 올릴 것이고 일단은 Proximity 이미지 2개를 이름하고 sw version 만 서로 다르게 하여 만들 것입니다.

자, 그럼 8.Creating the binary files and images & programming the flash 로 넘어갑니다.
1. Download DA1458x_SDK_5.0.3 zip
2. 2. Open & Build the bootloader project from the path:
\DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\utilities\secondary_bootloader.secondary_bootloader.uvprojx
3. 3. Copy the secondary_bootloader.hex (from the path
utilities/secondary_bootloader/Out) into the mkimage folder (utilities/mkimage path).
4. Open proximity reporter project from the path:
DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\projects\target_apps\ble_examples\prox_reporter\Keil_5\prox_reporter.uvprojx
5. Change device name in NVDS (user_config.h) to:     #define USER_DEVICE_NAME    "SUOTA-1"
6. Change the software version in the ble_580_sw_version.h to: DA14580_SW_VERSION
“v_3.0.6.1”


7. Build the project and rename the full_emb_sysram.hex as fw_1.hex.
이거 이름이 저렇게 되어서 헤깔리더라고요. 빌드하면 다음과 같이 hex 파일이 나옵니다.
DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\projects\target_apps\ble_examples\prox_reporter\Keil_5\out_580\prox_reporter_580.hex
prox_reporter_580.hex 파일을 fw_1.hex로 바꾸라는 것이죠.

8. Copy ble_580_sw_version.h (from the DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\sdk\platform\include) into the
mkimage folder (DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\utilities\mkimage path) and change the name to fw_version_1.h.

9. Change device name in NVDS (user_config.h) to:     #define USER_DEVICE_NAME    "SUOTA-2"
10. Change the software version in the ble_580_sw_version.h to: DA14580_SW_VERSION
“v_3.0.6.2”

11. Build the project and rename the full_emb_sysram.hex as fw_2.hex.
이거 이름이 저렇게 되어서 헤깔리더라고요. 빌드하면 다음과 같이 hex 파일이 나옵니다.
DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\projects\target_apps\ble_examples\prox_reporter\Keil_5\out_580\prox_reporter_580.hex
prox_reporter_580.hex 파일을 fw_2.hex로 바꾸라는 것이죠.

12. Copy ble_580_sw_version.h (from the DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\sdk\platform\include) into the
mkimage folder (DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\utilities\mkimage path) and change the name to fw_version_2.h.

저는 추가로 DSPS 프로젝트를 컴파일하여 나온 hex 파일을 sps_device.hex 바꾸고 sw_version_3.h 내용을 다음과 같이 바꾸어서, sps_device.hex 와  sw_version_3.h utilities\mkimage path 에 놓았습니다.
#define DA14580_SW_VERSION "v_3.0.6.4"
#define DA14580_SW_VERSION_DATE "2015-10-15 16:01 "
#define DA14580_SW_VERSION_STATUS "REPOSITORY VERSION"

13. Convert the 3 .HEX files to .BIN with the hex2bin program (can be found in the
flash_programmer folder). This can be easily done by dragging and dropping the file on the
HextoBin.exe
 secondary_bootloader.hex -> secondary_bootloader.bin
 fw_1.hex -> fw_1.bin
 fw_2.hex -> fw_2.bin

DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\utilities\flash_programmer 폴더의 hex2bin.exe 프로그램이 있는데,
이 프로그램 위에 fw_1.hex 파일을 마우스로 선택해서 끌어다 옮겨 놓으면 fw_1.bin 이 생깁니다.
마찬가지로 fw_2.bin , sps_device.bin 을 만듭니다.

At this point, you should have the following binary & header files added to the mkimage folder:

8.2 Creating the image files 내용에 따라 진행해 봅시다.
일단 D:\manual\Dialog\DA1458x_SDK_5.0.3\DA1458x_SDK\5.0.3\utilities\mkimage 폴더로 가면 메뉴얼과 다르게 mkimage.exe 파일이 없습니다.


여기의 하위 msvc 폴더로 가면 msvc.sln 이 있는데, MS visual C++ 프로젝트 파일인 듯 합니다.
visual studio 가 있어야 실행이 되는데 저는 2013 버전으로 해서 빌드하니 Debug 폴더에 mkimage.exe 파일이 생겼습니다.

그리고 나서 메뉴얼에 있는 위치에 mkimage.exe 파일을 copy 했습니다.

bin 파일을 img 파일로 변환합니다.
cmd 명령어로 명령창을 띄우고, mkimage 폴더의 위치로 이동합니다.

거기에서 다음과 같은 명령어를 실행하여 fw_1.img , fw_2.img, dsps_v1.img 를 만듭니다.
mkimage.exe single fw_1.bin fw_version_1.h fw_1.img
mkimage.exe single fw_2.bin fw_version_2.h fw_2.img
mkimage.exe single sps_device.bin fw_version_3.h dsps_v1.img


At this point, the 2 images have been created as shown below:

8.3 Creation of the multi_part.bin for the SPI memory using Scheme 1
Scheme 1 has the OTP blank. Therefore, the secondary bootloader will have to be stored in the
external memory.
Using Scheme 1, the file multi_part.bin which will be programmed into the SPI memory has the
outline architecture shown below:
다음의 메모리맵 구조로 된 multi_part.bin 파일을 만듭니다. SCHEME 1 구조인, 외부 메모리에 부트로더와 실행 이미지 2개 및 Product Header로 구성된 multi_part.bin 파일을 만듭니다.

mkimage.exe 로 다음의 명령어를 이용해서 만듭니다.
mkimage.exe multi spi secondary_bootloader.bin fw_1.img 0x8000 fw_2.img 0x13000 0x1F000 multi_part.bin

다음 내용은, smartsnipets 툴로 multi_part.bin 파일을 SPI 메모리에 굽는 내용인데, 똑같은 내용이라 메뉴얼의 8.5 Preparing the SPI memory: erasing the SPI memory 내용을 참고하십시요.
중요한 점은 17 페이지의 Figure 17 처럼 팝업창이 뜨면 No 버튼을 눌러주세요. 안 그러면 앱을 돌렸을때, SUOTA 디바이스가 안 뜹니다.

위의 이미지를 구워 넣고, 구글 play 스토어에서 SUOTA 앱을 받아서 스마트폰에 설치하고 실행하면 다음과 같은 화면이 떠서 SUOTA가 제대로 동작하고 있음을 알 수 있습니다.

제가 실제 테스트해 본 경우에는, 리셋 버튼을 눌러 줘야 SUTA 앱에서 SUOTA-1 이 검색되네요.

메뉴얼의 10 Running SUOTA from an Android platform 을 보고 따라 하면 잘 되는데, 제가 추가로 테스트 한 내용을 적어 봅니다.
이전에 dsps_v101.img(dsps_v1.img 는 erase 기능이 없는 버전이라 기능을 추가해서 dsps_v101.img로 다시 만들었습니다.)은 DSPS 프로그램을 조금 수정하여 Erase 명령을 집어 넣어 0x13000 부터 32KByte(0~0x3FFF) , 즉 0x13000~0x16FFF 영역을 지우도록 했습니다.

이후의 스마트폰으로 테스트한 상황을 쭉 나열해 보겠습니다.
1. multi_part.bin을 SPI FLASH에 넣은 후,  리셋하고 SUOTA 앱을 실행하면 SUOTA-1 device Name 이 뜹니다.
2. 이 디바이스로 들어가면 Update device 메뉴가 뜹니다.
3. 누르고 들어가면, 제가 PC에서 스마트폰에 넣어둔 이미지들이 여러가지 보이네요. 3번에서 이미지를 고르면 바로 4번으로 넘어갑니다. 제가 dsps_v101.img 를 선택하고 4번에서 Send to device 를 누르니 “Same Image Error”가 나와서 Download가 안되네요. 이유는 모르겠습니다. (이 때, 일단 fw_2.img 를 넣은 다음에 다시 dsps_v101.img를 다운로드하면 잘 됩니다.)
4. 3번에서 dsps_v101.img 가 다운 안되서 fw_2.img를 선택하고 Send to device 버튼을 누릅니다.

5. 다운로드가 정상으로 완료되고 부팅을 할거냐고 물어보면 OK 합니다.
6. SUOTA-2 로 디바이스가 바뀌었습니다. 제대로 BANK-2 에 다운로드 되었음을 알 수 있습니다.
7. SUOTA-2 로 들어가서 Update device를 누릅니다.
8. dsps_v101.img를 선택하고 Send to device 누릅니다.

9. BANK-2 에 제대로 다운로드 되었고 리셋한다는 팝업이 뜨면 OK 합니다.
10. 이제 DSPS F/W가 동작하므로 SUOTA 앱에는 device name이 보이지 않습니다.
11. DSPS 앱을 실행하니 DSPS-1 이라는 device name 이 뜨네요.
12. 제가 BLE 프로토콜로 [erixxxx 라고 스트링을 송신하면 0x13000~0x16FFF 까지 32KByte 를 지우는 동작이 수행됩니다.
현재는 SRAM에서 프로그램이 돌고 있으므로 바로 변화는 없습니다. 나중에 지우고 리셋 동작을 추가하면 바로 SUOTA-1로 동작이 될 것 같습니다.

13. 리셋을 하면, SRAM에서 실행되던 것이, 다시 부팅하면서 SPI에서 읽어서 SRAM에 loading 하게 됩니다.
이 때, 이전에 dsps_v101 에서 메모리를 지워버렸으므로 부트로더가 프로그램이 없는 것으로 인식해서 자동으로 부팅 가능한 SUOTA-1 이 실핸됩니다.
14. SUOTA-1 로 들어갑니다.
15. 다시 dsps_v101.img 를 선택합니다.
16. BANK-2 로 다시 send to device 버튼을 누릅니다.

17. 다운로드가 잘 되었고, 리붓 -> 확인을 누릅니다.
18. 리셋 되었습니다.
19. DSPS 프로그램이 동작 되므로 SUOTA 앱에 안보입니다.
20. DSPS 앱으로 보면 보입니다. dsps_v101.img 프로그램 이미지가 잘 실행 되었군요.
이렇게 앞으로, BANK-2 에다가 어떤 일반 dialog 프로그램이라도 다운로드 할 수가 있습니다.
하지만, 0x13000 영역을 지우는 코드가 반드시 있어야 다시 SUOTA-1 로 돌아가서 다시 SUOTA로 새로운 프로그램 이미지를 다운로드할 수 있습니다.

하지만 주의할 점은, 반드시 BANK-2에만 다운로드해야 한다는 점입니다. 잘못해서 BANK-1에 다운로드 하면 다시 SUOTA로 부팅이 안되고, 처음의 multi_part.bin 을 JTAG로 SPI FLASH에 구워 넣어줘야 합니다.


21. 다시 DSPS 프로그램이 동작하네요. 그리고 다시 Erase 명령을 실행시키고 리셋 하면?
22. SUOTA 프로그램이 부트로더에 의해 자동으로 동작하여 SUOTA 앱으로 device name 이 검색되고, 프로그램 이미지를 다운로드 가능합니다.


자, 이렇게 SUOTA를 이용해서 SUOTA 가 아닌 다른 프로그램도 다운로드 가능한 방법을 알아봤습니다.
꼼 수 이지만, 조금 더 손보면 괜찮을 것 같습니다.

끝으로 여기서 사용한, 0x13000 영역을 지우는 명령이 들어있는 DSPS 프로그램 프로젝트를 압축해서 첨부하겠습니다.
app_sps_scheduler.c 의 void app_user_callback(void) 함수에서 "[erixxxx" 를 검출하면 다음의 함수가 실행되어 32KByte 블럭을 지우는 코드가 들어있습니다. (host 프로젝트가 아니고 device 프로젝트를 실행하시면 됩니다)
DA14580_DSPS_3.150.2___13_2_2015\DA14580_DSPS_3.150.2\dk_apps\keil_projects\sps\sps_device

void app_spi_erase_prog_test(void)
{
    // Enable FLASH and SPI
    spi_flash_peripheral_init();
    spi_flash_block_erase(0x13000,BLOCK_ERASE_32);
}


[erasable DSPS 프로그램 다운로드 링크]