페이지

글목록

레이블이 M0인 게시물을 표시합니다. 모든 게시물 표시
레이블이 M0인 게시물을 표시합니다. 모든 게시물 표시

2017년 2월 27일 월요일

[IC 소개] 앞으로 사용할 MCU 키트 소개.

오늘도 사장님께서, 선물로 여러가지 장나감들을 사 주셨다. ^^.

1. XMOS MCU 개발 키트.(8-CORE,2000 MIPS)

2. STM32F769 개발 키트(CORTEX-M7)


3. STM32F030 개발 키트 (CORTEX-M0)



선물인가? 짐인가? (똥인가? 된장인가?)

2016년 8월 26일 금요일

[PSOC] PSOC4 UART 부트로더가 내장된 키트 소개(049)

이번에 PSOC4 보드(C8CKIT-049)를 여러 개 샀습니다.



저렴해서 ($4) 여러개 구입했는데, 비슷하게 생긴 보드(C8CKIT-043) 와 다른 점은 JTAG 가 포함되지 않은 점입니다.
또한 USB-to-I2C 도 포함되어 있지 않네요. I2C는 CAPSENSOR 튜닝할 때 필수인데... 없군요.


따라서 프로그램할 수 있는 방법이 없기 때문에, UART 부트로더가 내장되어 있습니다.
전원을 넣을 때, Switch 를 누른 상태로 전원을 넣으면 부드로더 모드가 되서 PSOC Creator 에서 UART로 프로그램을 다운로드할 수 있습니다.

자세한 내용은 다음에 좀 더 시간이 나면 올리겠고,,,
CY8CKIT-049 보드에 대해서 평가를 하자면, UART 부트로더를 테스트할 수 있어서 좋았지만
몇천원 더 주고 043 보드를 사는 것이 훨씬 낫다. 입니다.

JTAG와 USB-I2C 가 없어서 아주 많은 기능을 못 쓰게 되니 1개 사실 때는 043 보드가 좋고,
여러개 사실 때는 043 보드 1개에 049 보드 여러개 사시던가, 디버거가 있으시면 049 보드만 사도 괜 찮겠습니다.

2016년 8월 3일 수요일

[SAM D21] Atmel Wifi 모듈 테스트 소식

안녕하세요,

Wifi 모듈 에 관한 글이 인기가 많은 듯 하네요. ^^

AT 커맨드 모드로 간단한 테스트를 진행하려고 했는데,
Wifi 모듈의 펌웨어를 바꿔야 AT 커맨드 모드를 사용할 수가 있다고 합니다.

현재는 Wifi 모듈에 펌웨어 업데이트가 안되서 SPI 통신으로 동작을 테스트 할 생각입니다.

지난 번에 개발키트는 프로차일드사에 업데이트를 맡겼는데, Wifi 모듈과 연결된 
SAMD21 쪽 MCU 나 JLINK MCU 펌웨를 Update한 것으로 보입니다.

그 이후로는, SAMD21 MCU에 프로그램을 다운로드하고 예제 프로그램이 동작되었습니다.
일단 잘 동작 되어서 원인은 자세히 물어 보지 못했는데, 어떻게 했는지 한번 알아 보고 내용을 올려 보겠습니다.

그런고로, 현재 개발키트의 상태는?
1. SAMD21 MCU에 프로그램이 다운로드 되고 동작이 잘된다.
2. WINC1500 모듈의 펌웨어는 업데이트 안된다.
3. WINC1500 모듈의 현재 펌웨어 구동 방식은 SPI 통신방식이다.
4. WINC1500 모듈은 UART로 구동하는 AT Command 방식과 SPI 방식이 있는데, WINC1500 모듈의 펌웨어를 바꿔서 둘 중 1가지 통신 방법을 선택해서 사용할 수 있다.

지금, STM32F411 보드를 공부하고 있는 이유는 최종으로 STM32F411 보드에서 SPI 통신으로 WINC1500 모듈을 동작시키기 위함입니다.

STM32Fxx 보드를 좀 더 테스트하고 바로 WINC1500 모듈을 붙여서 글을 올리겠습니다.
조금만 기다려 주세요. ^^

2016년 7월 9일 토요일

[PROC] BLE-to-UART Peripheral (PROC BLE 042 KIT in 042-kit)

이전 게시물 [PROC] BLE-to-UART Central (PROC BLE Dongle in 042-kit) 에서 다룬 
BLE 모듈과 같이 동작하는 BLE-to-UART Peripheral 모듈을 알아보겠습니다.

싸이프레스의 BLE-to-UART 는 Central 과 Peripheral   H/W 가 특정한 장치에서만 구현되는 것은 아닙니다.

동글을 Peripheral 로 쓰고 042보드를 Central로 사용해도 됩니다. 기본 구조는 둘 다 동일한데,
제가 예제로 Central을 USB Dongle 장치로 사용하고 042보드를 Peripheral로 사용했을 뿐입니다.


나중에 컴파일할 때, Device select 에서 IC와 포트 설정만 맞춰주면 서로 역할을 바꿀 수 있습니다.
또한 PROC BLE가 아니라 PSOC BLE로도 단순히 Device만 바꾸면 BLE-to-UART 장치가 됩니다.

이전글에서 프로젝트를 열어서 콤포넌트 업데이트하는 과정은 다 똑같으니 다시 설명은 안해도 될 것 같습니다.

디바이스만 042 키트에 결합된 모듈의 MCU로 잘 설정하고 컴파일하면 끝이고,
Cetral 장치와 Peripheral 장치를 모두 전원을 인가하면 서도 자동으로 연결이 됩니다.



그런 다음에 디버거를 통해 USB-to-UART 로 PC와 연결하여 Terminal 프로그램을 각각 실행해서 데이터를 송수신하면 터미날에 송수신 캐릭터가 나타나는 것을 볼 수 있을 것 입니다.

BLE Peripheral 소스코드 첨부해 놓습니다. (링크)

[PROC] BLE-to-UART Peripheral (PROC BLE MODULE in 042-kit)

요새 좀 바빠서, 좀 늦게 올리게 되었습니다.

Cypress BLE 모듈 중, PSOC 보다 가격이 좀 싼 IC이고, CY8CKIT-042_BLE 개발키트에 기본으로 포함된 USB 동글에 사용된 MCU PROC(CYBL10162-56LQXI)를 사용하여 BLE-to-UART 프로그램을 다뤄보겠습니다.

다음은 여기서 다룰 042-보드와 USB-to-BLE 동글 외형입니다.


042 키트에 BLE-to-UART 프로그램은 구글에서 찾은 PSOC-Creater 프로젝트 소스인데,
좀 오래전에 해 봐서 어떤 링크를 타고 들어가서 얻은 것인지는 확실히 모르겠습니다만
지금도 여기저기 있을 것 입니다. 나중에 글을 다 올리면서 프로젝트 코드 첨부해 놓겠습니다.

이 프로젝트 소스를 다운 받아서 손 댄 것은 거의 없는데, 수정한 부분은 다음과 같습니다.

1. Cypress 에서는 BLE-to-UART 프로파일이 없어서 누군가 Custom Profile로 만들어 놔서 그런지,
업데이트 하라는 메시지와함께 에러가 뜹니다. 

콤포넌트가 깨지고, 에러가 나네요.

2. 그래서 업데이트를 하면 되고, 



업데이트를 하면 다음과 같이 컴포넌트가 정상적인 아이콘으로 바뀌고, 컴파일 시 에러도 없어집니다.



3. Select Device 로 모듈에 사용된 MCU를 설정해서 컴파일하고 다운로드하면 끝입니다.


다음 글에서는,  BLE-042 kit(USB-to_BLE 동글과 같이 동작하는 스마트폰 앱이 없어서) 에서 동작하는 프로그램을 알아 보겠습니다.

프로젝트 링크

2016년 6월 28일 화요일

[PROC] Cypress BLE KIT인 CY8CKIT-042 BLE 테스트

다음번에는 Cypress BLE 키트인 CY8CKIT-042 BLE 로 SPP(Serial Port Profile) 테스트 내용을 올려보겠습니다.

SPP 는 예전에 블루투스 클래식에서 쓰던 프로파일이라고 하는데,
이름이야 상관없는데 회사마다 BLE-to-UART 프로파일을 부르는 말이 조금씩 차이가 있네요.

아뭏든, BLE<-->UART 기능은 다이얼로그의 DSPS나 노르딕이나 같습니다.

Cypress 의 BLE-to-UART 프로파일은 Cypress가 등록한 것이 없어서 Custom Profile로 누가 만들어 놨는지 모르지만,
인터넷에서 찾아서 테스트를 해 봤습니다.

동작은 잘 됩니다만, BLE-to-UART 앱이 없어서 BLE 모듈과 USB 동글을 사용하여 PC와 연결해서 테스트를 했습니다.

오늘은 다음에 다룰 내용만 잠깐 이야기 해 봤습니다.

이만 마치겠습니다.

2016년 6월 7일 화요일

[nordic BLE] PCA10028 개발키트 프로그램 다운로드 방법

1. Keil MDK 툴 최신 버전을 받아서 설치합니다.

2. nRF BLE 칩의 stack 과 프로그램을 다운로드 할 수 있는 툴인 nRFGO Studio 툴을 다운로드 받아서 설치합니다.
Complete 버전으로 설치합시다. 안그러면 PCA10028 개발툴의 연결 안 되는 경우가 있습니다.

3. nRF51 SDK 를 다운로드 합니다. 여기에 각종 예제 파일과 soft device(stack 개념) 및 soft device+예제파일이 컴파일된 HEX 파일등이 들어 있습니다.

4. PCA10028 개발키트와 PC를 USB 케이블로 연결합니다.

5. 프로그램을 다운로드 해서 동작 시키는 방법은 여러가지가 있습니다. 3가지 정도 말씀드려 보겠습니다.
(제가 해본 내용은 Soft device를 설치해야 하는 BLE 예제만 동작 시켜 봤습니다.)

5-1. 각 예제 중에서 1개를 선택해서, 내부 폴더를 열면
hex 폴더가 있고 그 안에 ~pca10028.hex 로 끝나는 softdevice 와 application 프로그램이 통합된 파일이 있습니다.
이 hex 파일을 드래그해서 PCA10028 개발키트에 드롭해 주면 프로그램이 들어가서 자동 리셋된 후에 실행 됩니다.
(최근의 segger 디버거의 기능인듯 한데, PC에 연결하면 USB 드라이브가 1개 생기는데 이 드라이브에 hex 파일을 copy 해서 paste 해주면 프로그램이 다운로드되는 기능이 생겼습니다.)

5-2. nRFGO Studio 툴로 프로그램하는 방법.
- nRFGO Studio를 실행하면 왼쪽 아래의 Device manager 에서 segger debugger 를 선택하면, nRF51422 이 표시되는지 확인합니다.



- 우측 위의 Program Softdevice를 선택합니다. 나머지 작업은 그림에 써져 있네요.


- Program Application 탭을 선택하고 Keil MDK 컴파일러에서 컴파일된 hex 파일을 선택합니다.
여기서 hex 파일은 5-1 의 hex 파일과 다릅니다. 5-1의 hex 파일은 softdevice 가 포함되어 있고, 5-2의 hex 파일은 softdevice 파일이 포함되어 있지 않습니다. 주의하시기 바랍니다.
나머지 과정은 그림 내에 포함되어 있네요.


이렇게 하면 자동으로 리셋 후, 프로그램이 동작합니다.


5-3. KEIL MDK 컴파일러에서 직접 application program만 다운로드하는 방법.
이 방법은 Softdevice 가 먼저 설치되어 있어야 합니다. 5-2 의 Program Softdevice 까지는 똑같이 nRFGo Studio로 진행해 주시기 바랍니다.
그리고 나서 NRF51 SDK 의 Keil 예제 BLE 프로젝트 파일을 열어서(아무 것도 건드리지 말고) 컴파일 해서 프로그램 버튼을 눌러 주면 Application 만 특정 영역에 Update 됩니다.

[Keil MDK ver5 프로젝트 파일 위치]

[다운로드 버튼 : 컴파일 한 후, 다운로드 버튼을 눌러 주세요]

2016년 6월 3일 금요일

[PSOC] PSOC4 SPI 핀 <-> GPIO 핀

SPI 기능으로 설정된 핀을 잠시 GPIO 기능의 핀으로 바꿨다가 다시 SPI로 되돌리는 테스트를 했습니다.

이런 경우는 보통 드문데, 핀이 모자라서 하게 되었습니다.

SPI TopDesign 탭의 내용은 다음과 같습니다.




SPI -> GPIO 동작 방법은 다음과 같습니다.
1. SPI component STOP.
2. SPI 핀 모드를 GPIO 출력인 경우 Strong Drive 로 설정
3. SPI핀 기능을 GPIO 핀으로 변경
4. GPIO 기능 처럼 핀을 프로그램에서 사용.
    SPIFLASH_Stop();
    SPIFLASH_miso_m_SetDriveMode(SPIFLASH_miso_m_DM_STRONG);
    
    SPIFLASH_SET_HSIOM_SEL(*(reg32 *)SPIFLASH_miso_m__0__HSIOM, SPIFLASH_miso_m__0__HSIOM_MASK,
                                   SPIFLASH_miso_m__0__HSIOM_SHIFT, SPIFLASH_HSIOM_GPIO_SEL);

        SPIFLASH_miso_m_Write(1); CyDelayUs(1);
        SPIFLASH_miso_m_Write(0); CyDelayUs(1);
        SPIFLASH_miso_m_Write(1); CyDelayUs(1);

GPIO -> SPI 동작 방법은 다음과 같습니다.
1. SPI핀 기능을 GPIO 핀으로 변경
2. SPI component START.
    SPIFLASH_SET_HSIOM_SEL(*(reg32 *)SPIFLASH_miso_m__0__HSIOM, SPIFLASH_miso_m__0__HSIOM_MASK,
                                   SPIFLASH_miso_m__0__HSIOM_SHIFT, SPIFLASH_HSIOM_SPI_SEL);
    SPIFLASH_Start();

2016년 5월 28일 토요일

[nordic BLE] PCA10028 BLE 개요

안녕하세요, 노르딕 개발키트인 PCA10028 공부를 시작합니다.

이 키트는 노르딕 BLE 칩인 nRF51422_xxAC 라는 ARM-Cortex-M0 로 되어 있습니다.
간단한 스펙을 말씀드리자면 다음과 같습니다.

  • Single chip, highly flexible, 2.4 GHz multi-protocol device
  • 32-bit ARM Cortex M0 CPU core
  • 256kB/128kB flash and 32kB/16KB RAM
  • Supports Bluetooth Smart protocol stacks
  • Thread safe and run-time protected
  • Event driven API
  • On air compatible with nRF24L series
  • 3 data rates (2Mbps/1Mbps/250kbps)
  • +4dBm output power
  • -93dBm sensitivity, Bluetooth Smart
  • PPI system for maximum power-efficient applications and code simplification
  • Flexible power management system with automatic power management of each peripheral
  • Configurable I/O mapping for analog and digital I/O


일반적으로 BLE IC는 FLASH 메모리나 OTP ROM의 용량이 많은데, 이 메모리의 대부분은 스택이라는 BLE 관련 처리 Library 함수들이 들어가더군요. 다이얼로그 BLE 칩도 대부분 메모리가 OTP ROM 에서 BLE stack이 차지합니다. 노르딕도 마찮가지로 100KB가량을 노르딕에서 제공하는 Soft Device 라고 부르는 BLE STACK이 차지합니다. 이 스택은 전용툴인 NRF Go STUDIO 로 프로그램해서 넣어주고, Application 프로그램은 다른 어드레스 영역에 프로그램해서 돌아갑니다.

Application 프로그램은 BLE 에서 32KByte 가 안되도 충분히 돌아가고도 남습니다. 왜냐하면 필요한 함수가 STACK에 라이브러리로 이미 들어있으니까, 필요한 함수를 호출해서 쓰면 되니까 메모리가 더 필요 없게 되는 원리입니다.

^^. KEIL 컴파일러는 ARM 칩은 32KBYTE를 무료로 상용 버전과 똑같이 동작하므로 BLE 칩 업체들이 KEIL 컴파일러를 많이 사용하는 것 같습니다.얼핏, 알기로는 IAR 컴파일러는 ARM CORTEX-M0 는 16KB 밖에 지원 안되도록 정책이 바뀐 것으로 들었는데, 만약 이것이 사실이라면 업체에서 "왠만하면 KEIL 컴파일러를 사용하라"는 말의 의유는 무료 컴파일 코드사이즈 때문인 것 같네요.

제가 다루려는 SW는 BLE Peripheral 중 BLE-to-UART 라는 보통 SPP(Serial Port Profile)로 부르는 부분만 다루려고 합니다.
KC 인증을 받은 제품으로 BLE를 외주 개발로 잠깐 하는 것이라, 현재 다니는 회사 일과 연결이 안되고 시간도 없어서 그런 것이니 양해 바랍니다.


그리고 PCA10028 키트는 다음과 같은 페어차일드에서 파는 PBLN51822 모듈을 동작시키기 전에 SW 동작 확인을 위해 쓰기위한 중간과정입니다.
다음 번에는 BLE 프로그램 하는 방법을  다뤄 보겠습니다.

2016년 5월 2일 월요일

[PSOC] PSOC4 Emulated EEPROM Component 사용기

PSOC4는 PSOC5와 달리 EEPROM Component가 없습니다.

그래서 em_EEPROM Component를 사용해야 하는데,
처음에 아무리해도 동작이 안되는 것이여서 여러가지 사례들을 웹에서 찾아봤는데,
별 도움이 안되는군요. 아마 영어가 딸려서 이해를 못 한 것도 큰 것 같습니다.

그러다가, 혹시 하는 생각에 전원을 껐다 켜니 그제서야 제대로 동작하네요.

제가 행한 프로그램 동작 과정은, em_EEPROM를 디버거를 사용해서 프로그램을 다운로드했었습니다.
em_EEPROM은 내부 플래쉬 메모리를 이용하는 방식인데, 
디버거를 사용해서 프로그램을 할 때, 다운로드할 때 플래쉬를 먼저 모두 지워버리나 봅니다.
그리고 초기 값을 쓰죠.

그러니까, 항상 프로그램을 다운로드 할 때 똑같은 초기값으로 써져서 전혀 em_EEPROM 이 동작하지 않는 것처럼 보이는 것이였습니다.

PSOC4 의 예제 중에서, em_EEPROM 예제가 있는데 잘 동작합니다.
주의하실 점, 다운로드하면 전부 지워지고 초기화된다.

따라서, 동작을 확인하려면 다운로드한 후, 리셋를 꾹 눌러본다.

PSOC5의 EEPROM Component는 디버거로 다운로드해도 지워지지 않는다.
PSOC4는 주의하자~~^^

2016년 3월 26일 토요일

[dialog] 생산라인툴(PLT:Product Line Tool) 소개

dialog 칩의 양산시 다운로드 툴인 PLT 를 소개합니다.

처음에, '이게 도대체 뭐하는 물건인고?' 생각 했는데 아주 괜찮은 툴인것 같습니다.
위 그림에서 10-PIN Header 가 16개 있는데, 이곳에 DA14xxx 제품을 연결해서 동시에 다운로드가 가능합니다.

이 10-PIN Header 에 연결되는 제품을 메뉴얼에서는 DUT(Device Under Test)라고 부릅니다.

핀 연결은 다음과 같습니다.
다이얼로그 툴인 Smartsnippets 를 써 보신분은 아시겠지만, 
JTAG가 없어도 UART로 SPI,I2C,OTP,RAM 에 프로그램이 가능합니다.

그와 마찬가지의 원리로 PLT는 USB to 16 x UART 와 몇 개의 GPIO 출력으로 다이얼로그 DA14xxx 제품에
프로그램을 다운로드 가능하고, X-TAL 의 Calibration , RF Verify 작업도 가능합니다.

추가적인 기능으로, 보드 어드레스의 시작 번지를 지정해주면 각 제품을 다운로드 할 때마다 어드레스가 
1씩 Count Up 되면서 구워집니다.

위의 그림에서 보시면 총 7개의 핀이 연결되는데, 
메뉴얼을 보면 XTAL Calibration Pulse 핀은 UART RX 핀으로 대체 가능하므로 총 6개의 핀만 있으면 됩니다.
또, OTP에 프로그램할 것이 아니라면 VPP 도 필요없죠.(5PIN?)

툴과 DUT의 핀연결표는 다음과 같습니다. 



그런데, UART TX/RX 는 특정 핀을 사용해야 하는지? 를 다이얼로그에 문의해 본 결과 
P0.4 (TXD),P0.5(RXD)로 사용해야 한답니다.

다음 그림이 SPI FLASH 메모리와 UART 핀을 같이 사용하는 회도도 예입니다.

다이얼로그사에 PLT 관련해서 메일로 문의했던 내용을 올려봅니다.

라인툴(PLT : Product Line Tool)을 아직 구입 전인데, 회로도를 라인툴과 연결할 것을 예상하여 설계하려고 합니다.
저희 회사에서는 현재 SPI 외부 메모리를 사용하는 DA14580 DSPS 프로파일을 사용하고 있고,
또 다른 용도의 장치에서는 DSPS의 프로그램을 조금 고쳐서 SPI FLASH 의 부팅시 쓰는 영역를 제외한, 안 쓰는 부분을 데이터 메모리로 사용도 하고 있습니다.

RX 와 MISO 를 같이 사용, CTS 와 MOSI 를 같이 사용. PLT(Product Line Tool)을 사용하고자 할 때,
URX,UTX를 J1 헤더에 위(외부 SPI FLASH 로 부팅하고, UART 를 사용하는 DSPS 회로도 #1)와 같이 연결해서 SPI FLASH 또는 OTP 에 데이터를 Read/Write.

(예상 문제 : DA14580 F/W가 동작할 때, 외부 SPI FLASH를 최초 부팅 이미지 로딩 기능 외에도 데이터메모리의 용도로 읽고 쓰는 경우 URX,CTS로 쓰레기 데이터가 들어올 수 있다.)

따라서 다음과 같이 회로(외부 SPI FLASH 로 부팅하고, UART 를 사용하는 DSPS 회로도 #2)를 연결하려고하는데,
아직 라인툴을 구입 전이라서 UTX,URX 의 포트를 이동해도 괜찮은지 묻고 싶습니다.
UART로 부팅하는 경우는 없어서 P0.4,P0.5 를 꼭 맞춰서 연결할 필요는 없다고 생각이 듭니다.

부팅 및 데이터메모리용도의 SPI FLASH 메모리와 UART 를 사용하는 DA14580 DSPS 프로그램에 라인툴을 연결할 때, 어떻게 최적의 포트 연결을 하는지 도움 요청 드립니다.



또 한가지 질문 드립니다.

라인툴 매뉴얼을 보니 위의 연결 예제 회로가 있는데, 위의 4k7 풀다운 저항을 라인툴과 DUT 쪽(ex:DA14580 DSPS 장치)에
연결을 해야하는 건가요?

또한, 밑의 Anti Ringing Solution 은 선택 사항인 것 같습니다만,
위/아래 회로 예를 둘 다 적용을 하자면 다음과 같이 DA14580 쪽 (DUT) 회로도를 작성하면 될까요?

답변)
저희 Reference PLT (production line tool) 또는 EVK 을 통해 code download시에 특별하게 UART Rail 과 SPI rail이 겹쳐 있으셔도 문제가되지 않으십니다.

1) UART I/F 를 통해 PLT 와 DA14580 통신시 SPI memory가 down (CS port low setting) 되어 High impedance를 유지됨으로 Flash memory가영향을 받지 않습니다.

2) 또한 DA14580과 Flash memory 와의 I/F (Write or Read) 시 UART에는 영향을 받지 않습니다.  

3) DA14580의 PLT 는 첨부파일에 적용된 회로도 대로 만들어 졌습니다, 현재 팀장님 회로도와 저희 Reference (DA14580+External flash memory) 회로도가 동일합니다.  

2016년 3월 3일 목요일

[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월 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 프로그램 다운로드 링크]