[mbed] 라이브러리 버그 수정해보기 - Publish 방법

생각보단 쉽다. 자신이 만든 라이브러리 라면 더 쉽겠지만,

다른 사람이 만든 라이브러리의 버그를 과감히 수정해 보는 경험을 해보자. (물론 라이브러리 관리자에게 허가를 받아야 하지만)

일단, 간단하게 해본 경험을 적어보았다.

아래 http://medium.com 을 통해 적은 글을 클릭해서 보자. 

그대로 긁어 오려니, CSS가 너무 안맞네. 수정하기는 귀찮고 링크로 대신한다.


from : https://medium.com/@bjnhur/be-a-contributor-of-mbed-library-82a1b75fc754

Ethernet Library for W5500 WIZnet ) 예제로 모두에게 오픈되어 있는 #mbed에 흔적을 남겨보자. 누군가에게 도움이 되지 않아도..되길 바라지만


Be a Contributor of mbed library



저작자 표시 비영리 변경 금지
신고

mbed.org 가상 시리얼 포트 설치하기 - Virual COM Port

반드시 해 줘야 한다.

mbed가 기본적으로 USB2Serial을 제공하고 있으나, 이 드라이버를 반드시 꼭 설치 해 줘야 한다.

최소한 나의 경우에는 자동으로 설치되지 않았다. ㅠㅠ


그러나, 여기에 짜짠하고 설치파일이 준비되어 있다.

https://mbed.org/handbook/Windows-serial-configuration

아래 그림처럼 창이 뜨고, 별표있는 곳을 클릭하면 다운로드~~~~~,





첨부파일까지 가져다 놓자. 이게 머라고, 그냥 실행시키면 된다.

보드를 켜두고, USB 연결해 놓고 설치한다. 

이놈이 설치하다가 보드를 찾는다.



이제 아래 코드로 Serial 출력이 가능하게 된다.


설명은 여기 https://mbed.org/handbook/SerialPC 참고


#include "mbed.h"              
 
Serial pc(USBTX, USBRX); // tx, rx
 
int main() {
    pc.printf("Hello World!\n");
}

끝..



저작자 표시 비영리 변경 금지
신고

ARM CortexM 무료 개발 툴 설치하기 - CooCox 컴파일 환경

먼저, IDE를 쓰기 위한 기본 툴들은 다 설치했다. 아래 링크를 참고하고,



이제 도스창에서 벗어나, 화려한 그래픽의 세계로 이 컴파일러를 쓸 수 있도록 설정해 보자.

대부분, Eclipse+CDT 의 조합으로 사용하는 것이 대부분이다.

Getting Started with the ARM GCC Compiler on Windows for the STM32F4DISCOVERY Board

링크 글을 참고해서 설치를 하는 게 좋다.


아니면, Free/Open ARM Cortex MCU Development Tools 인 CooCox 를 설치해 보는 것도 나쁘진 않다.


from : http://www.coocox.org/CooCox_CoIDE.htm


CoIDE is a new, free and highly-integrated software development environment for ARM Cortex MCU based microcontrollers, which includes all the tools necessary to develop high-quality software solutions in a timly and cost effective manner.

Video for CoIDE 1.7.5, use the board mode to create the project:


설치는 다른 글에서~~ (사실  Coocox 홈페이지를 보고 쭉 따라하면 된다.)


=)




저작자 표시 비영리 변경 금지
신고

GNU Utilities package 설치하기 - 윈도우즈 환경

"ls", "rm" 과 같은 리눅스/유닉스에서 많이 쓰이는 실행 명령어를 사용할 수 있게 

CoreUtils for Windows 을 방문하여 설치하도록 하자.


아래 링크에서 개발환경을 구성하기 위해 따라하고 있는데, 

Getting Started with the ARM GCC Compiler on Windows for the STM32F4DISCOVERY Board


여기에서 언급한 이 부분은 아래와 같이, "Clean Project" 이런것을 수행할 때 Makefile 에 보면 "rm -f" 블라블라 이렇게 쓰여 있는데 Windows 개발환경에서도 문제 없이 쓰려면, 깔아두는 것이 건강에 좋다..머 이런것이다.

  1. Install ARM GCC from this website. Be sure to check "Add path to environment variable" on the last page of the wizard. (Reference)
  2. Install the GCC MAKE utilty from this link. Download the "Complete package, except sources" file. Accept defaults in the setup wizard. (Reference)
  3. Download and install the GNU utilities package for Windows. When finished, add the path to the folder containing the binaries to your system path. This installs the "rm" command so that the "Clean Project" option will work.


암튼 깔아보자. 이것도 머 그냥 "Next"만 눌러주면 끝이 난다.










설치 후에 해당 폴더에 가서, 자신있게 "ls" 를 쳐보자.

"dir"을 치지 않아도 되네..



=)


저작자 표시 비영리 변경 금지
신고

GNU MAKE Utility 설치하기 - 윈도우에서 Makefile 사용하기

Windows 환경에서 Makefile 을 할 수 있도록 GNU Make for Windows 를 설치한다.

(물론, 다양한 툴이 설치될 때 여러 버전의 Make 유틸이 설치되기는 한다. 의도하지 않아도, 특히 컴파일러들을 설치하면 각자의 Make 툴이 있다. 이때는 버전이나 실행파일 위치를 조심해야 한다.)

우리는 무료로 쓰는 툴을 깔아야 하니 "GNU"에 감사하면서, 

http://gnuwin32.sourceforge.net/packages/make.htm 여기를 방문하도록 한다.


소스까지는 보통 필요없으니, 

다운로드에서 "Complete package, except sources" 이부분의 링크를 클릭하여 다운을 받는다.

여기도 링크(Setup) 복사해 둠. 누르면 Sourceforge 사이트로 이동해 다운로드를 시작한다.


받은 다음, 무조건 실행. 다음의 과정을 따라 설치하면 끝..











쉽다. 설치는 그냥 "Next" 버튼만 눌러주면......끝

확인은 해당 설치 폴더로 가서 (시스템 Path를 잡아주지 않았으므로, 꼭 해당 폴더로 가야함. 시스템내에 make util이 하나 밖에 없다면 편하게 Path를 잡아주고 사용해도 무방 ^^)

make -v

를 실행해 본다.



=)


저작자 표시 비영리 변경 금지
신고

ARM GCC Compiler 설치하기 - Free

일단, 무료로 써야 하니 무료 컴파일러를 설치해 보자.

핵심을 설치하고 나서, GUI, IDE 환경을 깔아야 할 터.


일단, https://launchpad.net/gcc-arm-embedded 를 방문한다.

깔끔한 GNU Tools for ARM Embedded Processors 에 대한 설명 페이지와 다운로드 할 수 있는 링크들이 나와 있다.

여기서 최신판으로 다운로드 한 다음, 설치에 들어간다.

다운로드만을 원하면, 여기로 https://launchpad.net/gcc-arm-embedded/+download 가서 클릭클릭.


설치 파일을 실행한다.





당연히, 동의해 주시고~~



그냥, 기본폴더로 복사해 주는 귀차니즘.





"환경변수 등록을 해 주세요." 한다. 아니면 나중에 막 수동으로 해 줘야 하는 귀찮음이..



이상 설치 끝..

커멘드 창을 띄워서 아무 디렉토리에서 막 수행해 본다. 설치확인은 아래와 같이 버전을 확인해 보는 것으로 마무리. 끝



=) 



저작자 표시 비영리 변경 금지
신고

Gate Level Simulations - "X"가 막나와~~

문제는 머냐..잘 정리해둔 곳에서 가져와보자..아래글 참고


출처 : Synchronizer 시뮬레이션 문제


사실, metastable을 피하는 방법은 예전에 한번 posting한 적이 있는데요.


Metastable을 피하는 가장 머리가 편한 방법은 2개의 F/F을 직렬로 사용하는 2-flop 방법입니다. 

...

그런데, 1-flop이던 2-flop이던 F/F을 이용하여 동기화기(synchronizer)를 만들고 이 회로에 대한 타이밍 시뮬레이션 할 때, 동기화기로 사용한 F/F이 setup/hold timing을 만족하지 못하는 경우 F/F의 출력이 unknown으로 되어 전체 시뮬레이션이 망가지는 경우가 있다는 점이지요.


결론적으로 회로는 맞게 동기화기를 삽입해 두었다면, 시뮬레이션 툴에서 "X" 가 막 전달 되어서 골치 때리는 문제는 아래처럼 피해가자는 말씀..


해결방법은 딱 정리해 보면,

출처 : http://www.cadence.com/rl/Resources/white_papers/Gate_Level_Simulation_WP.pdf


Example timing file, The following listing shows an example timing file:


// Disable all timing checks in top.inst1

PATH top.inst1 -tcheck

/* Disable all timing checks in all scopes below top.inst1 except

for instance top.inst1.U3 */

PATH top.inst1... -tcheck

PATH top.inst1.U3 +tcheck


여기도 정리를 잘 해둠, 여기는 쭉 다 읽어 보기 Gate Level Sim은 이렇게 한다는 문서이니깐..

출처 : http://hereitellyouwhatilearnttoday.wordpress.com/2011/11/27/gate-level-simulations-2/

3) tcheck file : A file containing a list of all the first flops of the synchronizes in the design where a timing violation is guaranteed and thus taken cared of by the design such as placing synchronizers.Therefore we dont check timing violations in this path.
Each entry is of the form:

 PATH full_hierarchical_path -tcheck


짤은..


Unknown 'X' Nevada Desert
Unknown 'X' Nevada Desert by murkmad 저작자 표시비영리변경 금지



저작자 표시 비영리 변경 금지
신고

[정리] Verilog 배열관련

참고 : http://blog.naver.com/beahey/90192889480


배열 선언은

reg [7:0] a[3];

이렇게 한다. 앞쪽의 "[7:0]"는 배열을 표현보다는 버스의 비트를 나타내고,

배열을 뒤쪽의 "[3]" 으로 보고 이해하는 것이 쉽다.

즉 위의 예는 8비트짜리 배열 3개을 가지고 있다는 의미


또한 중요한 것은 포트로 뽑아낼 수가 없다는 엄청 불편한 진실..

즉 module의 input/output으로 쓰기 곤란하다는..

구체적인 예는 위 참고 사이트 참조


짤은 "Array" ㅋ


array
array by OiMax 저작자 표시


저작자 표시 비영리 변경 금지
신고

ARM-GCC 개발리소스 | IDE, Compiler

개발환경을 돈으로 사면 제일 편함~~

그렇지 않다면..


원본 : http://embdev.net/topic/129986

GCC-based IDEs: 무료 IDE 환경, Eclipse 기반이겠지

Free GCC toolchain packages:

Other tools:

  • OpenOCD – Open Source JTAG tool for ARM

(...)


Operating Systems:

  • FreeRTOS – many example projects for various ARM boards provided

머든 눈으로 봐서는 한계가..직접 쿠쿠쿠쿠쿠

=)


저작자 표시 비영리 변경 금지
신고

CMSIS-DAP Interface Firmware | mbed.org

간단한 CMSIS-DAP 디버거를 만들고 싶다면 꼭 읽어보자.

전체적인 설명페이지는 여기 : http://mbed.org/handbook/cmsis-dap-interface-firmware


CMSIS-DAP interface F/W

한국말로 설명하는 페이지가 만들어 지려나~

일단, 원본 페이지는 http://mbed.org/handbook/cmsis-dap-interface-firmware

결론적으로 보니, CMSIS-DAP Interface를 담당하는 보드는 LPC11U35 시리즈가 부착된 보드를 사용해야 하고 타켓보드로는 Target Flash algorithm이 이미 구현되어 있는 LPC812, LPC1768, KL25Z, KL46Z, KL05Z 중에 하나를 탑재한 보드로 골라야 이 페이지가 제공하고 있는 정보를 실제로 구현해서 검증해 볼 수 있겠다.

소스 저장소

제공하는 기능

  • USB Mass Storage Device for drag and drop programming of the target chip
  • USB Communications Device Class for Serial Communication with the target chip
  • USB HID CMSIS-DAP for debugging
  • USB bootloader for updating the interface firmware itself

하드웨어 구조

http://mbed.org/media/uploads/emilmont/board.png

여기서 중요한 것은 빨간박스 왼쪽이라는 것. PC쪽에도 붙고, Target MCU쪽으로도 붙는 기능을 담당.

그림으로 좀 더 크게 보면, http://mbed.org/media/uploads/emilmont/interface.png

PC에 연결

아래 정의된 형태로 기기가 잡힌다.

  • MSD, mass storage device class ; 이건 USB Driver로 잡히는 부분
  • CDC, communications device class ; 이건 Virtual Serial Port 등으로 쓰이는 것..
  • HID, human interface device class ; 이건 ... 조사를 좀더

Target MCU에 연결

여러가지 핀들이 연결되지만, 기본적으로

  • SWD + Reset
  • UART
  • Sleep and Wake (Not currently implemented, reserved for future use)

소프트웨어 부분

아래의 내용들을 참고하면 되겠다.

공유 코드들

Bootloader든 CMSIS-DAP Interface F/W 든 공통적으로 사용되는 코드/미들웨어부분은 아래 폴더에 저장되어 있음

  • shared\cmsis: The CMSIS-CORE software layer
  • shared\rtos: The RTX operating system
  • shared\USBStack: The USB Device middleware

Bootloader

현재 LPC11U35 지원코드만 공개되어 있음, 위치는 여기로

bootloader\mdk\lpc11u35\lpc11u35_bootloader.uvproj

At startup it checks the state of a given pin, default high by pull-up resistor: 기본적으로 풀업이 된 핀이라는 것.

  • If the pin is high: it simply relocates the vector table to point to the interrupt handlers of the CMSIS-DAP Interface Firmware and then it jumps to its start address.; USB 디바이스를 잡고, bin 코드 카피을 기다리는 모드로 진입
  • If the pin is low: it enumerates as a mass storage device, waiting for a new firmware image to be flashed using In Application Programming (IAP) ; 인터페이스 펌웨어 자체를 변경하고자 하면 이런 모드로 진입해야 함..

프로그램의 구성은 아래 그림과 같이 나누어져 있다.

http://mbed.org/media/uploads/emilmont/bootloader.png

새로운칩에는??

나중에 시도할 때 좀 더 자세히 보기로 하고 여기서 스킵~~ 일단, 처음에는 LPC11U35를 쓰는 것이 단순한 방법~

The current implementations are:

  • LPC11U35: bootloader\hal\TARGET_NXP\TARGET_LPC11U35

Flash 알고리즘

Target MCU에 새로운 이미지 파일(F/W bin 파일)을 프로그램할 수 있도록 하는 flash algorithm을 Target MCU의 RAM영역에 로드되어야 한다.

이 알고리즘들은 각각 개발해야 하는데,

position independent code로 컴파일 된 프로그램 결과물을 binary blob라 불리는 배열코드로 변경한다음, 인터페이스 코드에 복사하여 넣은 다음 코드를 개발하면 된다. 아래의 Pythone 코드 사용법을 보고 문장을 고침 문맥이 이상하다. 수정이 필요함

일단 제공되는 2가지 MDK 프로젝트는 다음과 같다. We provide two such MDK projects for generating the flash algorithms for two family of microcontrollers:

  • interface\flash_algo_mdk\LPC_IAP\LPC_IAP.uvproj: flash algorithm for NXP LPC family
  • interface\flash_algo_mdk\MKXXX\MKXX.uvproj: flash algorithm for Freescale MK family

당연한 얘기지만, 위의 프로젝트들은 multiple configurations을 가지고 있다. 각각 다른 Flash size 별로

일단, 만들어진 코드들은 제공되는 Python script 로 c code 형태로 변경하여 원하는 Target에 맞는 인터페이스 F/W 프로젝트에 포함시킬 수 있다. 스크립트의 사용은 아래와 같다.

  1. 일단 output elf binary ".axf"파일을 tools\tmp\flash_algo.axf 에 복사한다.
  2. 다음 코드를 수행한다.

1
tools> python flash_algo_gen.py
  1. 그럼 tools\tmp\flash_algo.txt 파일이 생성된다. 아래와 같은 파일이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const uint32_t flash_algo_blob[] = {
    0xE00ABE000x062D780D0x240840680xD30000400x1E6440580x1C49D1FA0x2A001E520x4770D1F2,
 
    /*0x020*/ 0x28100b000x210ed3020xd0eb010x494f47700x607af44f0x600844490x2100484d0x21aa7001, 
    /*0x040*/ 0x215573010x210173010x1c40f8000x477020000x477020000x41f0e92d0x20324c460x2500444c, 
    /*0x060*/ 0xe884261dL0xf1040061L0x4f4301140x462046880x696047b80x2034b9600x61e8840x4641483b, 
    /*0x080*/ 0x680044480x462060e00x696047b80xd0002800L0xe8bd2001L0xe92d81f0L0xf7ff41f0L0x4d35ffc1, 
    /*0x0A0*/ 0x444d46040xe9c52032L0xf1050400L0x4e3201140x4628460f0x47b060ac0xb9686968L0xe9c52034L, 
    /*0x0C0*/ 0x482a04000x444860ac0x680046390x462860e80x696847b00xd0dc2800L0xe7da2001L0x41f0e92d, 
    /*0x0E0*/ 0x646140x4825d11d0x12fcf8d40xd03a4281L0x428148230x4823d0370xd0344281L0x4030ea4f, 
    /*0x100*/ 0xd0304281L0x100e9d40xe9d44408L0x441112020x692144080x696144080x69a144080x42404408, 
    /*0x120*/ 0x463061e00xff7cf7ffL0x21324d120x4f12444d0x1000e9c50x114f1050x468860a80x47b84628, 
    /*0x140*/ 0xb9806968L0xe9c52033L0xf44f0600L0xe9c57000L0x480640020x444846410x612868000x47b84628, 
    /*0x160*/ 0x280069680x2001d0950xe7930x40x400fc0800x80x1fff1ff10x4e697370, 
    /*0x180*/ 0x123456780x87654321L0x00x0, 
};
 
static const TARGET_FLASH flash = {
    0x1000002F// Init
    0x10000051// UnInit
    0x10000055// EraseChip
    0x10000097// EraseSector
    0x100000DD// ProgramPage

Interface

현재, 2가지 모델이 지원된다. 공개된 것이 2개라는, 각 벤더별로 각 회사에서 지원하고 있겠지..

  • LPC11U35: interface\mdk\lpc11u35\lpc11u35_interface.uvproj
  • KL25Z: interface\mdk\kl25z\kl25z_interface.uvproj

각 프로젝트는 여러 설정을 지원한다.

  • Support different targets: providing a different flash algorithm and reset/unlock sequences
  • Standalone build at address 0x0 (useful during development for better debugging) / Bootloader build at address 0x5000 ready to be loaded by the bootloader.

새로운 Target MCU에 대한 지원

아래 2 파일들을 잘 구성하면 된다.

  • target_flash.h: Implements an API to load a new binary into the flash of the target, largely generated from the above Flash Algorithm project
  • target_reset.c: provides function in order to unlock/set the target in a specific state

현재 이미 구현된 target은 다음과 같다 :

  • LPC812: interface\target\hal\DBG_NXP\DBG_LPC812
  • LPC1768: interface\target\hal\DBG_NXP\DBG_LPC1768
  • KL25Z: interface\target\hal\DBG_Freescale\DBG_KL25Z
  • KL46Z: interface\target\hal\DBG_Freescale\DBG_KL46Z
  • KL05Z: interface\target\hal\DBG_Freescale\DBG_KL05Z

새로운 Interface Chip에 포팅

잘 만든 USB IP가 들어간 새로운 칩이 있다면 이 Interface F/W을 포팅할 수 있다.일단 이 이슈는 스텝전이고, LPC11U35에 해 본 다음 진행할 것이라 나중에 보강해 보자.

Concatenated Production Image

양산시 이미지 합치기 이렇게 번역이 되건만, 내용파악이 정확히 되지 않아.나중에..

저작자 표시 비영리 변경 금지
신고
◀ PREV 123 NEXT ▶