국내 한샘 디지텍을 비롯한 대다수 PCB 업체들의 4-Layer PCB stack-up의 경우 아래와 같은 구성을 가짐. (1.6T 1OZ 기준)

JLCPCB의 경우 원판 제조사가 상이하여 아래와 같은 구성을 가짐.

위 내용처럼 JLCPCB는 기본 설정 되는 4 Layer PCB의 내부 구리층이 0.5OZ, 외부 구리층이 1OZ로 구성되나 국내는 외층 0.5Oz, 내층 1OZ로 되어 반대 입니다.

고전력을 사용하는 모터 드라이브와 같은 PCB를 제작 시 주의하여 주문 제작하여야 합니다.

 

반응형

'MCU > HW 이야기' 카테고리의 다른 글

콘덴서의 종류와 선정  (0) 2009.08.22
128 회로 설계시 주의 점!!  (0) 2009.06.22
푼수의 블로그 개설  (0) 2009.06.18

PC에서 타겟으로 firmware 파일 등을 전송 시 시리얼 포트를 통하여 전송할 경우, 이들 파일은 대부분 바이너리 형식을 취하기 때문에, 시리얼통신의 제어문자와 바이너리 테이터와의 구별이 불가능 합니다. 따라서 제어 문자 와 구별이 가능 하면서도 바이너리코드를 전송할 수 있는 방법이 hex 파일 포맷 입니다. hex 파일의 포맷은 다양한 방식이 존재 합니다. 인텔, 모토롤라, S레코드 등 메이져 칩벤더의 고유의 방식이 있습니다.

hex 파일의 포맷은 바이너리 데이터와 제어문자의 충돌을 피하기 위해 바이너리 데이터의 코드값을 바이트 단위의 아스키문자로 변환하여 이를 텍스트화 시킨 것 이다.

 

MARK

Length

OffSet

Type

Data

CheckSum

:

1바이트

2바이트

1바이트

0~255바이트

1바이트



① MARK

HEX파일의 모든 레코드는 ":" 문자(아스키코드 "3A")로 시작해야 한다. 이를 레코드 마크(MARK)라고 한다.


② Length

각 레코드에 포함된 바이너리 데이터의 길이이다. Length 필드의 크기가 1바이트이므로 Data 필드는 0~255바이트의 문자를 지녀야 한다. 예컨데, 레코드의 Data 10개이면 10 = 0x0A 이므로 Length 필드에는 "0A"의 텍스트파일 형식으로 기입된다. 따라서, 실재 Length필드는 ASCII문자 2바이트를 필요로 한다. 이하, Offset, Type, Data, CheckSum 모두 마찬가지이므로 주의하도록 하자.

 ③ Offset

바이너리파일의 처음위치로부터 해당 레코드의 데이터가 위치하는 상대적 위치를 말한다. Offset 2바이트(=16비트)의 값을 가지므로 8, 16비트 CPU의 경우 어떠한 어드레스라도 OffSet 필드를 이용해서 직접 어드레싱이 가능하다. 그러나, 20, 32비트 CPU의 경우엔 16비트의 OffSet만으로는 직접 어드레싱이 불가능하므로 간접 어드레싱해야 하는데, 이를 구별하기 위해 필요한 필드가 Type필드이다.

 ④ Type

레코드타입을 뜻함. 00의 경우 데이터 어드레스, 01의 경우 HEX파일이 종료됨을 뜻하는 레코드를 의미한다. 8, 16비트 CPU HEX 파일은 이 두가지 경우만 필요하지만, 20, 32비트 CPU에서는 추가적인 레코드를 필요로 한다. 이들 추가 레코드 타입에 대해서는 첨부된 자료를 참고하도록 하자.


 ⑤ Data

바이너리 데이터이다. 하나의 레코드 안에 포함될 수 있는 데이터의 개수는 0 ~255개까지이다. 그보다 데이터 수가 많을 경우에는 적당한 개수만큼 분할하여 레코드를 생성해야 한다.


 ⑥ CheckSum

HEX파일로 수신한 디바이스에서 올바른 바이너리 파일 변환을 위해 각 레코드가 오류없이 수신되었는지 체크하는 필드이다. CheckSum을 구하는 방법은 ② ~ ⑤의 필드를 바이트 단위로 쪼개어 모두 더한 다음 2의 보수(2's Complement)를 취하면 된다. 그 값이 1바이트를 넘을 경우 상위바이트의 값은 버리고 최하위 1바이트 부분만을 취한다.

 이제 바이너리 파일이 어떻게 HEX 파일로 변환되는지 실습해 보도록 하자.

 먼저, 바이너리 파일의 일부분을 열어봤다.

 02 01 55 78 7F E4 F6 D8

FD 75 81 16 02 00 84 8F

0C 8E 0B 8D 0A 8C 09 ...

 

이를 HEX 파일로 변환하면 다음과 같다.

 

:03000000020155A5
:
0C015500787FE4F6D8FD75811602008466
:
0800C2008F0C8E0B8D0A8C09D6

 
반응형

'MCU > SW 이야기' 카테고리의 다른 글

megaboot 입니다.  (0) 2009.08.23
표준 CRC16 TABLE 입니다.  (2) 2009.08.23
AVR ATmega128 Rsgister 정리 입니다.  (0) 2009.08.23
AVR Calculate  (0) 2009.08.09
AVR 디버깅 방법론  (1) 2009.08.08

megaboot 입니다. AVR의 Bootloader 라 보시면 됩니다.

예전 프로젝트시 원격 업그레이드 기능이 필요하여 외주 처리를 하였는데 한 300 정도
든 것 같았습니다.
인터넷 서핑 을 하다 발견하여 열어보니 프로토콜 처리 부분 빼고 동일하더군요 ㅡㅡ;;;
저와같은 실수를 하지 마세요ㅜㅜ
반응형

'MCU > SW 이야기' 카테고리의 다른 글

Intel Hex 파일의 이해  (0) 2009.08.27
표준 CRC16 TABLE 입니다.  (2) 2009.08.23
AVR ATmega128 Rsgister 정리 입니다.  (0) 2009.08.23
AVR Calculate  (0) 2009.08.09
AVR 디버깅 방법론  (1) 2009.08.08

//===========================================================================
// CRC 체크 표준
//===========================================================================
// KS초안_KSCIEC62056-61 에 정의된 표준 CRC 16 계산 테이블 입니다.
// 유용하게 사용하세요.

//---------------------------------------------------------------------------
// 계산식
#define SCrcCal(data) SCRC = ( (SCRC>>8) ^ Crc16Tbl[ (SCRC^data) & 0xFF ] )
U16 SCRC = 0xFFFF;

//---------------------------------------------------------------------------
// 표준 CRC 테이블
U16 Crc16Tbl[256] = {
    0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780,
    0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1,
    0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801,
    0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40,
    0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680,
    0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0,
    0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501,
    0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
    0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981,
    0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1,
    0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200,
    0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141,
    0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480,
    0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0,
    0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01,
    0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
    0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381,
    0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0,
    0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01,
    0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40,
    0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81,
    0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1,
    0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100,
    0x81C1, 0x8081, 0x4040
};

/*
 SCRC = 0xFFFF;
 SCrcCal(0x30);
 SCrcCal(0x31);
 SCrcCal(0x32);
 SCrcCal(0x33);
 SCrcCal(0x34);
 printf("SCRC = 0x%02X%02X\n",(unsigned char)(SCRC>>8),(unsigned char)SCRC); // "SCRC = 0x10DE"
 SCrcCal(0xDE);
 SCrcCal(0x10);
 printf("SCRC = 0x%02X%02X\n",(unsigned char)(SCRC>>8),(unsigned char)SCRC); // "SCRC = 0x0000"
*/


반응형

'MCU > SW 이야기' 카테고리의 다른 글

Intel Hex 파일의 이해  (0) 2009.08.27
megaboot 입니다.  (0) 2009.08.23
AVR ATmega128 Rsgister 정리 입니다.  (0) 2009.08.23
AVR Calculate  (0) 2009.08.09
AVR 디버깅 방법론  (1) 2009.08.08
반응형

'MCU > SW 이야기' 카테고리의 다른 글

Intel Hex 파일의 이해  (0) 2009.08.27
megaboot 입니다.  (0) 2009.08.23
표준 CRC16 TABLE 입니다.  (2) 2009.08.23
AVR Calculate  (0) 2009.08.09
AVR 디버깅 방법론  (1) 2009.08.08

1. 콘덴서란?

콘덴서란 전기를 축적하는 기능을 가진 수동 소자 입니다.  하지만 일반적인 회로설계에서의 콘덴서는 전기를 축적하는 기능 이외에 직류 전류를 차단하고 교류전류를 통과시키려는 목적으로 사용이 됩니다.
콘덴서는 기본적으로 2장의 전극판을 대향시킨 구조로 되어 있습니다. 여기에 직류 전압을 걸면, 각 전극에 전하라고 하는 전기가 축적되고 축적하고 있는 도중에는 전류가 흐르게 됩니다. 하지만 축적이 완료된 상태에서는 전류는 흐르지 않게 됩니다.
100uF 정도의 전해콘덴서에 테스터기의 저항 측정 모드에 놓고 접속시키면 순간 전류가 흘러 테스터기의 바늘이 움직이는 것을 확인 할 수 있습니다. 그러나 축적이 끝난 직후 바로 0으로 되고 맙니다. 이처럼 직류전압이 콘덴서에 가해진 경우, 순간적으로 전류가 흐르지만 후에 흐르지 않기 때문에 직류를 통과시키지 않으려는 용도에도 사용이 되게 됩니다. 하지만 교류의 경우 전류가 흐르게 되어, 교류 전류는 흐르게 되는 것 입니다.
콘덴서는 전극간에 절연체의 재질에 따라 나눠지게 됩니다.
콘덴서의 용량을 나타내는 단위는 패러드(farad :F)가 사용되며 일반적으로 사용되는 콘덴서의 축적 전하용량은 매우 작기 때문에 uF이나 pF의 단위가 사용됩니다. 최근에는 슈퍼 케패시터라 불리우는 매우 코용량의 콘덴서도 등장하였습니다.

앞서 우리는 콘덴서에 대하여 알아보았습니다. 제 블로그의 데이터시트 부분을 보시면 몇몇가지의 콘덴서 데이터시트를 찾으실 수 있습니다. 국내의 전문 콘덴서 업체는 삼영전자공업과 석영전자 두군데의 업체가 있습니다. 홈페이지를 보시면 많은 종류의 콘덴서 종류와 스펙을 확인하실 수 있습니다.

2. 콘덴서의 종류

2.1 알루미늄 전해 콘덴서

단순히, 전해콘덴서 또는 케미콘(chemical condenser)이라고도 부릅니다.
이 알루미늄 전해 콘덴서는 유전체로 얆은 산화막을 사용하며 전극으로 알루미늄 소재를 사용합니다. 이 전해 콘덴서는 크기에 비해 매우 큰 용량을 얻을 수 있으며 가격이 저렴하고 유전체의 굵기를 매우 얆게 할 수 있습니다.
또 다른 특징으로는 극성을 갖고 있어 회로 설계 및 조립시 극성에 주의해야 합니다. 일반적으로 마이너스 극성의 리드를 표시하는 부분에 흰색 띠를 표시하며 리드의 길이에 따라서도 극성을 표시 합니다. 알루미늄 콘덴서의 용량 및 전압은 자재의 표면에 16V/100uF 이러한 형식으로 표기가 되며, 1uF 에서 수천uF, 수만uF의 큰 용량의 제품군이 있습니다. 주요 사용 용도는 전원의 리플 및 맥동 제거를 위한 평활회로, 저주파 바이패스(저주파 성분의 노이즈를 그라운드 등에 패스 시켜 회로 동작을 유연하게 해 준다) 등에 사용됩니다. 단 코일 성분이 많아 고주파에는 적합하지 않으며 이를 곧 주파수 특성이 나쁘다고 말합니다.

2.2 알루미늄 전해 콘덴서



반응형

'MCU > HW 이야기' 카테고리의 다른 글

JLCPCB 멀티 레이어 보드 stack-up 주의사항  (0) 2026.01.06
128 회로 설계시 주의 점!!  (0) 2009.06.22
푼수의 블로그 개설  (0) 2009.06.18

+ Recent posts