PIC 마이크로컨트롤러
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
PIC 마이크로컨트롤러는 제너럴 인스트루먼트가 1975년 개발한 프로그래밍 가능한 인터페이스 컨트롤러로, 현재는 마이크로칩 테크놀로지의 등록 상표이다. RISC 구조와 하버드 아키텍처를 기반으로 하며, 다양한 종류의 PIC가 출시되어 직렬 통신 모듈, UART, 모터 제어 커널 등의 온보드 주변 장치를 지원한다. PIC는 배우기 쉬운 명령어 집합과 저렴한 개발 도구를 제공하지만, 단일 누산기를 사용하고 레지스터 뱅크 스위칭이 필요하며, 하드웨어 호출 스택에 제한이 있다는 단점이 있다. PIC는 다양한 하드웨어 기능과 변형을 제공하며, 개발 도구, 프로그래머, 디버깅 도구를 통해 개발을 지원한다. PIC는 FreeRTOS와 같은 운영 체제를 활용할 수 있으며, 유사한 마이크로컨트롤러와 클론 제품도 존재한다.
더 읽어볼만한 페이지
- 마이크로컨트롤러 - 마이크로프로세서
마이크로프로세서는 CPU 기능을 단일 IC에 통합한 것으로, 무어의 법칙에 따라 성능이 향상되어 왔으며 다양한 아키텍처와 기술 발전을 거쳐 현재 광범위한 분야에서 사용된다. - 마이크로컨트롤러 - ARM 아키텍처
ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다. - 명령어 집합 구조 - ARM 아키텍처
ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다. - 명령어 집합 구조 - PA-RISC
PA-RISC는 휴렛 팩커드에서 개발한 RISC 기반 명령어 집합 아키텍처로, HP 서버 및 워크스테이션에 사용되었으며 대용량 L1 캐시와 SIMD 명령어 확장 등의 특징을 가졌으나 아이테니엄 아키텍처로의 전환으로 단종되었다. - 마이크로프로세서 - 중앙 처리 장치
중앙 처리 장치(CPU)는 컴퓨터 시스템의 핵심 부품으로, 프로그램 명령어를 해석하고 실행하여 데이터를 처리하는 장치이다. - 마이크로프로세서 - ARM 아키텍처
ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다.
| PIC 마이크로컨트롤러 |
|---|
2. 역사
2. 1. 초기 개발
1975년 제너럴 인스트루먼트(General Instrument)는 CP1600 16비트 중앙 처리 장치(CPU)와 함께 사용하기 위해 PIC를 개발했다.[5] 원래 PIC는 CP1600과의 인터페이스를 처리하고, 자체 프로세서를 사용하여 주변 장치를 제어하는 프로그래밍 가능 인터페이스 컨트롤러(Programmable Interface Controller)로 설계되었다. 이론적으로 1600 CPU와 1640 PIC 장치 컨트롤러의 조합은 메인프레임 컴퓨터에서 볼 수 있는 채널 컨트롤러와 유사한 성능을 가진 매우 높은 성능의 장치 제어 시스템을 제공할수 있었다. 예를 들어 플로피 컨트롤러에서 단일 PIC는 드라이브를 제어하고, 성능을 향상시키기 위해 적절한 양의 버퍼링을 제공한 다음 직접 메모리 접근(DMA) 또는 CPU의 비교적 간단한 코드를 사용하여 호스트 컴퓨터와 데이터를 전송할 수 있었다.[7]하지만, 제너럴 인스트루먼트 CP1600|CP1600]]는 강력하게 마케팅을 하지 않아, 시스템 채택이 거의 이루어지지 않았고, 약 3백만 대가 판매된 인텔리비전이 유일하게 널리 사용되었다. GI는 1976년에 CP1600 없이 사용할 수 있도록 설계된 독립형 모델 1650 PIC[5]을 도입했다. 같은 해에 출시된 인텔 MCS-48만큼 강력하지는 않았지만 더 저렴했고 시장을 찾았다.[7] 1985년 제너럴 인스트루먼트의 마이크로일렉트로닉스 사업부가 분사하여 마이크로칩 테크놀로지가 설립되었고, PIC는 마이크로칩의 주요 제품 중 하나가 되었다.[7]
2. 2. 1600 이후
1985년, 제너럴 인스트루먼트는 마이크로일렉트로닉스 부문을 매각했고, 새로운 소유주들은 당시 대부분 구식이 된 거의 모든 것을 취소했다. 하지만 PIC는 내부 EPROM으로 업그레이드되어 프로그래밍 가능한 채널 I/O 컨트롤러를 생산하게 되었다.[8]
1998년, 마이크로칩은 성공적인 직렬 프로그래밍 가능 PIC16C84의 플래시 프로그래밍 및 소거 가능한 버전인 PIC16F84를 출시했다.[9] 1993년에 출시된 마이크로칩 16C84(PIC16x84)는 온칩 EEPROM 메모리를 탑재한 최초의[10] 마이크로칩 CPU였다. 2001년, 마이크로칩은 더 많은 플래시 프로그래밍 가능 장치를 출시했으며, 2002년에 본격적인 생산을 시작했다.[9]
오늘날, 다양한 온보드 주변 장치(직렬 통신 모듈, UART, 모터 제어 커널 등)와 256 단어에서 64K 단어 이상("단어"는 특정 PIC 마이크로 제품군에 따라 8~16 비트 길이의 어셈블리 언어 명령 하나)의 프로그램 메모리를 갖춘 방대한 종류의 PIC가 출시되고 있다.
PIC와 PICmicro는 현재 마이크로칩 테크놀로지의 등록 상표이다. 일반적으로 PIC는 '''주변 장치 인터페이스 컨트롤러'''의 약자로 생각되지만, 제너럴 인스트루먼트가 초기 PIC1640 및 PIC1650 장치에 대해 사용한 원래 약자는 "'''프로그래밍 가능한 인터페이스 컨트롤러'''"였다.[3] 이 약어는 곧 "'''프로그래밍 가능한 지능형 컴퓨터'''"로 대체되었다.[4]
2013년까지, 마이크로칩은 매년 10억 개 이상의 PIC 마이크로컨트롤러를 출하하고 있었다.[11]
2. 3. 현재
오늘날, 다양한 온보드 주변 장치(직렬 통신 모듈, UART, 모터 제어 커널 등)와 256 단어에서 64K 단어 이상( "단어"는 특정 PIC 마이크로 제품군에 따라 8~16 비트 길이의 어셈블리 언어 명령 하나)의 프로그램 메모리를 갖춘 방대한 종류의 PIC가 출시되고 있다.[9]PIC와 PICmicro는 현재 마이크로칩 테크놀로지의 등록 상표이다. 일반적으로 PIC는 '''주변 장치 인터페이스 컨트롤러'''의 약자로 생각되지만, 제너럴 인스트루먼트가 초기 PIC1640 및 PIC1650 장치에 대해 사용한 원래 약자는 "'''프로그래밍 가능한 인터페이스 컨트롤러'''"였다.[3] 이 약어는 곧 "'''프로그래밍 가능한 지능형 컴퓨터'''"로 대체되었다.[4]
2013년까지, 마이크로칩은 매년 10억 개 이상의 PIC 마이크로컨트롤러를 출하하고 있었다.[11]
3. 아키텍처
PIC 아키텍처(PIC32 및 PIC64 제외)는 하버드 아키텍처를 기반으로 하며, 단일 누산기(W0)를 사용하는 RISC 구조를 가지고 있다. 주요 특징은 다음과 같다:
- 하나의 누산기(W0)는 거의 모든 명령어의 암시적 피연산자이다.
- 고정 길이 명령어의 수가 적고, 대부분 고정된 타이밍(2 클럭 사이클 또는 8비트 모델에서 4 클럭 사이클)을 가진다.
- 소량의 어드레싱 가능한 데이터 공간(제품군에 따라 32, 128 또는 256 바이트)은 뱅킹을 통해 확장된다.
- 별도의 코드 및 데이터 공간(하버드 아키텍처).
- 명령어 메모리는 데이터 메모리보다 넓어 명령어 내에 즉시 상수를 포함할 수 있다. (이는 PDP-8 또는 아폴로 유도 컴퓨터와 같은 단일 오퍼랜드 누산기 머신과의 주요 차이점이다.)
- 두 번째 피연산자는 메모리 위치 또는 즉시 상수이다.
- 간접 레지스터를 사용하여 간접 주소 모드를 에뮬레이션할 수 있지만 다른 주소 지정 모드는 없다.
- 데이터 공간에 매핑된 CPU, 포트 및 주변 레지스터
- ALU 상태 플래그는 데이터 공간에 매핑된다.
- 프로그램 카운터도 데이터 공간에 매핑되며 쓰기가 가능하며, 이는 간접 점프를 구현하는 데 사용된다.
- 반환 주소를 저장하기 위한 하드웨어 스택
- 무조건 분기 명령어만 있다.
- 조건부 실행은 다음 명령어를 조건부로 무효화하는 조건부 건너뛰기 명령어를 통해 수행된다.
RAM이 메모리와 레지스터의 역할을 모두 수행하고 RAM을 일반적으로 "레지스터 파일" 또는 단순히 "레지스터"라고 하므로 메모리 공간과 레지스터 공간 간의 구분이 없다.
PIC 마이크로컨트롤러는 명령어 길이를 통일하고 명령어 수를 줄인 RISC와 유사한 구조를 가지며, 코드 영역과 데이터 영역이 분리된 하버드 아키텍처를 채택하여 코드 영역과 데이터 영역의 버스 폭을 각각 최적화한 것이 특징이다. "비트 코어"는 코드 메모리의 1개 명령어의 비트 수를 가리킨다. 예를 들어, 명령어 길이 12비트 코어의 경우 코드 영역의 버스 폭은 12비트, 데이터 영역의 버스 폭은 8비트이다. 또한 코드와 데이터 각각의 어드레스 공간도 필요 충분한 크기로 억제되어 있다.
대부분의 명령어가 1 사이클에 실행되지만, 시리즈에 따라 1 사이클당 클럭은 다르다. 8비트 PIC (PIC10/12/16/18계열)는 4클럭이 1사이클, PIC24/dsPIC계열은 2클럭이 1사이클, MIPS 아키텍처 코어의 PIC32계열은 1클럭이 1사이클이다.
대다수의 품종에서 동작을 위한 클럭 발진 회로를 내장하고 있어 단독으로 동작하는 것이 가능하지만, 고정밀도를 요하는 경우를 위해 외장형 수정 등을 사용하는 발진 회로도 내장하고, 또한 외부 오실레이터로부터의 클럭 입력에 의한 동작도 가능하게 되어 있다.
프로그램 코드용 내장 메모리로는, 옛날에는 원타임 ROM, EPROM (자외선 소거) 제품이 있었지만, 현재는 대다수가 플래시 ROM 제품이 되었다. 많은 품종에서, 비휘발성 데이터 저장을 위해 EEPROM이 내장되어 있다.
3. 1. 핵심 아키텍처
PIC 아키텍처(PIC32 및 PIC64 제외)는 하버드 아키텍처를 기반으로 하며, 단일 누산기(W0)를 사용하는 RISC 구조를 가지고 있다. 주요 특징은 다음과 같다:- 하나의 누산기(W0)는 거의 모든 명령어의 암시적 피연산자이다.
- 고정 길이 명령어의 수가 적고, 대부분 고정된 타이밍(2 클럭 사이클 또는 8비트 모델에서 4 클럭 사이클)을 가진다.
- 소량의 어드레싱 가능한 데이터 공간(제품군에 따라 32, 128 또는 256 바이트)은 뱅킹을 통해 확장된다.
- 별도의 코드 및 데이터 공간(하버드 아키텍처).
- 명령어 메모리는 데이터 메모리보다 넓어 명령어 내에 즉시 상수를 포함할 수 있다.
- 두 번째 피연산자는 메모리 위치 또는 즉시 상수이다.
- 간접 레지스터를 사용하여 간접 주소 모드를 에뮬레이션할 수 있지만 다른 주소 지정 모드는 없다.
- 데이터 공간에 매핑된 CPU, 포트 및 주변 레지스터
- ALU 상태 플래그는 데이터 공간에 매핑된다.
- 프로그램 카운터도 데이터 공간에 매핑되며 쓰기가 가능하며, 이는 간접 점프를 구현하는 데 사용된다.
- 반환 주소를 저장하기 위한 하드웨어 스택
- 무조건 분기 명령어만 있다.
- 조건부 실행은 다음 명령어를 조건부로 무효화하는 조건부 건너뛰기 명령어를 통해 수행된다.
RAM이 메모리와 레지스터의 역할을 모두 수행하고 RAM을 일반적으로 "레지스터 파일" 또는 단순히 "레지스터"라고 하므로 메모리 공간과 레지스터 공간 간의 구분이 없다.
PIC 마이크로컨트롤러는 명령어 길이를 통일하고 명령어 수를 줄인 RISC와 유사한 구조를 가지며, 코드 영역과 데이터 영역이 분리된 하버드 아키텍처를 채택하여 코드 영역과 데이터 영역의 버스 폭을 각각 최적화한 것이 특징이다. "비트 코어"는 코드 메모리의 1개 명령어의 비트 수를 가리킨다. 예를 들어, 명령어 길이 12비트 코어의 경우 코드 영역의 버스 폭은 12비트, 데이터 영역의 버스 폭은 8비트이다. 또한 코드와 데이터 각각의 어드레스 공간도 필요 충분한 크기로 억제되어 있다.
대부분의 명령어가 1 사이클에 실행되지만, 시리즈에 따라 1 사이클당 클럭은 다르다. 8비트 PIC (PIC10/12/16/18계열)는 4클럭이 1사이클, PIC24/dsPIC계열은 2클럭이 1사이클, MIPS 아키텍처 코어의 PIC32계열은 1클럭이 1사이클이다.
대다수의 품종에서 동작을 위한 클럭 발진 회로를 내장하고 있어 단독으로 동작하는 것이 가능하지만, 고정밀도를 요하는 경우를 위해 외장형 수정 등을 사용하는 발진 회로도 내장하고, 또한 외부 오실레이터로부터의 클럭 입력에 의한 동작도 가능하게 되어 있다.
프로그램 코드용 내장 메모리로는, 옛날에는 원타임 ROM, EPROM (자외선 소거) 제품이 있었지만, 현재는 대다수가 플래시 ROM 제품이 되었다. 많은 품종에서, 비휘발성 데이터 저장을 위해 EEPROM이 내장되어 있다.
3. 2. 데이터 공간 (RAM)
PIC는 범용 RAM으로 기능하는 레지스터 집합을 가지고 있다. 칩 내장 하드웨어 자원을 위한 특수 목적 제어 레지스터 또한 데이터 공간에 매핑된다. 메모리의 주소 지정 가능성은 장치 시리즈에 따라 다르며, 모든 PIC 장치 유형은 추가 메모리 주소를 확장하기 위한 뱅킹 메커니즘을 가지고 있다. (그러나 일부 장치 모델은 하나의 뱅크만 구현되어 있다). 후기 시리즈 장치는 선택된 뱅크에 관계없이 전체 주소 지정 가능 공간을 커버할 수 있는 이동 명령어를 특징으로 한다. 초기 장치에서는 모든 레지스터 이동이 누산기를 통해 이루어져야 한다.간접 주소 지정을 구현하기 위해 "파일 선택 레지스터"(FSR)와 "간접 레지스터"(INDF)가 사용된다. 레지스터 번호가 FSR에 기록된 후 INDF에서 읽거나 INDF에 쓰는 것은 실제로 FSR이 가리키는 레지스터에서 이루어진다. 후기 장치는 순차적으로 저장된 데이터에 접근하는 데 더 효율성을 위해 증가/감소 전후 기능을 사용하여 이 개념을 확장했다. 이를 통해 FSR을 스택 포인터(SP)처럼 사용할 수도 있다.
일부 핀 수가 많은 PIC18 장치를 제외하고는 외부 데이터 메모리에 직접 접근할 수 없다. 하지만 일반적인 I/O 포트를 사용하여 서브루틴을 사용하여 외부 메모리 및 기타 주변 장치에 접근하기 위한 병렬 버스 또는 직렬 인터페이스를 구현할 수 있으며, 이러한 프로그램된 메모리 접근은 (물론) PIC MCU의 기본 메모리에 접근하는 것보다 훨씬 느리다는 단점이 있다.
3. 3. 코드 공간
코드 공간은 일반적으로 온칩 ROM, EPROM 또는 플래시 ROM으로 구현된다. 일반적으로 외부 메모리 인터페이스가 없기 때문에 외부 메모리에 코드를 저장할 수 있는 기능은 제공되지 않는다. 예외는 PIC17 및 일부 고 핀 수 PIC18 장치이다.[31]3. 4. 워드 크기
모든 PIC는 8비트 덩어리 단위로 데이터를 처리하고 주소를 지정한다. 그러나 코드 공간의 주소 지정 단위는 일반적으로 데이터 공간과 동일하지 않다. 예를 들어, 기본형(PIC12) 및 중간형(PIC16) 제품군의 PIC는 프로그램 메모리를 명령어 너비와 동일한 워드 크기, 즉 각각 12비트 또는 14비트로 주소를 지정할 수 있다. 반면에, PIC18 시리즈에서는 프로그램 메모리가 8비트 단위(바이트)로 주소를 지정하며, 이는 16비트의 명령어 너비와 다르다.명확히 하기 위해, 프로그램 메모리 용량은 바이트 단위가 아닌 (단어 하나) 명령어 수로 표시하는 것이 일반적이다.
3. 5. 스택
PIC는 반환 주소를 저장하는 데 사용되는 하드웨어 호출 스택을 가지고 있다. 초기 장치에서는 하드웨어 스택에 소프트웨어로 접근할 수 없었지만, PIC18 계열 장치에서 개선되었다.3. 6. 명령어 집합
PIC 명령어 집합은 저가형 PIC의 약 35개 명령어에서 고가형 PIC의 80개 이상의 명령어까지 다양하다. 명령어 집합에는 레지스터에서 직접, 누산기(accumulator) 및 리터럴 상수에서, 또는 누산기 및 프로세서 레지스터에서 다양한 연산을 수행하기 위한 명령어, 조건부 실행 및 프로그램 분기를 위한 명령어가 포함된다.비트 설정 및 테스트와 같은 몇 가지 연산은 임의의 번호가 매겨진 레지스터에서 수행할 수 있지만, 2-입력 산술 연산은 항상 W(누산기)를 포함하며, 결과를 W 또는 다른 피연산자 레지스터에 다시 기록한다. 상수를 로드하려면 다른 레지스터로 이동하기 전에 W에 로드해야 한다. 이전 코어에서는 모든 레지스터 이동이 W를 통과해야 했지만, 이는 "고가형" 코어에서 변경되었다.
PIC 코어에는 조건부 실행 및 분기에 사용되는 스킵 명령어가 있다. 스킵 명령어는 "비트가 설정된 경우 스킵"과 "비트가 설정되지 않은 경우 스킵"이다. PIC18 이전의 코어에는 무조건 분기 명령어만 있었기 때문에 조건부 점프는 조건부 스킵(반대 조건 사용)과 무조건 분기를 사용하여 구현된다. 스킵은 바로 뒤에 오는 단일 명령의 조건부 실행에도 유용하다. 스킵 명령어를 스킵할 수도 있다. 예를 들어, 명령어 시퀀스 "skip if A; skip if B; C"는 A가 참이거나 B가 거짓인 경우 C를 실행한다.
PIC18 시리즈는 섀도 레지스터를 구현했다. 섀도 레지스터는 인터럽트 중에 여러 개의 중요한 레지스터를 저장하여 인터럽트 서비스 시 프로세서 상태를 자동으로 저장하기 위한 하드웨어 지원을 제공한다.
일반적으로 PIC 명령어는 5가지 클래스로 나뉜다.
- 8비트 즉시("리터럴") 피연산자를 사용하는 작업 레지스터(WREG)에 대한 연산. 예를 들어, `movlw` (리터럴을 WREG로 이동), `andlw` (리터럴을 WREG와 AND). PIC에 특유한 한 가지 명령어는 `retlw`로, 즉시 값을 WREG에 로드하고 반환한다. 이는 계산된 분기와 함께 룩업 테이블을 생성하는 데 사용된다.
- WREG 및 인덱싱된 레지스터를 사용한 연산. 결과는 작업 레지스터(예: `addwf ''reg'',w`) 또는 선택된 레지스터(예: `addwf ''reg'',f`)에 기록할 수 있다.
- 비트 연산. 이들은 레지스터 번호와 비트 번호를 사용하고 4가지 작업 중 하나를 수행한다: 비트 설정 또는 지우기, 설정/지우기 시 테스트 및 스킵. 후자는 조건부 분기를 수행하는 데 사용된다. 일반적인 ALU 상태 플래그는 번호가 매겨진 레지스터에서 사용할 수 있으므로 "캐리 지우기 시 분기"와 같은 연산이 가능하다.
- 제어 전송. 앞서 언급한 스킵 명령어 외에는 `goto` 및 `call`의 두 가지만 있다.
- 부프로그램에서 반환하는 것과 같은 몇 가지 기타 제로 피연산자 명령어 및 저전력 모드로 진입하기 위한 `sleep`.
3. 7. 성능
PIC 아키텍처는 속도 대 비용 비율을 극대화하는 데 중점을 둔다. 하버드 아키텍처는 명령과 데이터가 별도의 소스에서 나오기 때문에 타이밍과 마이크로회로 설계를 단순화하여 클럭 속도, 가격 및 전력 소비에 유리하다. PIC 명령어 집합은 프로그램 공간에서 빠른 룩업 테이블 구현에 적합하며, 많은 기능을 이런 방식으로 모델링할 수 있다. 최적화는 PIC의 비교적 큰 프로그램 공간과 임베디드 상수를 허용하는 명령어 집합 설계로 인해 촉진된다.인터럽트 대기 시간은 3개의 명령어 사이클로 일정하다. 외부 인터럽트는 4 클럭 명령어 사이클과 동기화되어야 하며, 그렇지 않으면 한 명령어 사이클의 지터가 발생할 수 있다. 내부 인터럽트는 이미 동기화되어 있으며, 일정한 인터럽트 대기 시간을 통해 PIC는 인터럽트 구동 저지터 타이밍 시퀀스를 달성할 수 있다.
4. 장점 및 한계
4. 1. 장점
PIC 마이크로컨트롤러는 배우기 쉬운 명령어 집합과 RISC 아키텍처를 채택하여 초보자가 쉽게 접근할 수 있다.[32] 내장 발진기를 통해 선택 가능한 속도로 동작하며, 50달러 미만의 저렴한 PICkit 장치를 사용하여 인-서킷 프로그래밍 및 디버깅이 가능하다.[32]PIC는 I²C, SPI, USB, UART, A/D, 프로그래밍 가능한 비교기, PWM, LIN, CAN, PSP, 이더넷 등 광범위한 인터페이스를 지원한다.[32] 또한, DIL 패키지로 제공되는 프로세서는 취미 활동으로 사용하기 용이하다.[32]
Microchip사는 MPLAB X라는 통합 개발 환경과 C 컴파일러(XC)를 무상으로 제공하며(무료 버전은 최적화 등에 기능 제한이 있음), 이를 통해 개발 환경 구축이 용이하다.[32]
아키하바라 등지의 전자 부품점에서는 PIC 칩과 라이터, 개발 환경을 쉽게 구할 수 있으며, 이는 PIC 마이크로컨트롤러가 널리 보급되는 데 기여했다. 특히 DIP 패키지의 풍부함은 아마추어 전자 공작에서 PIC가 흔들리지 않는 인기를 유지하는 요인 중 하나이다.
4. 2. 한계
PIC 마이크로컨트롤러는 단일 누산기를 사용하며, 많은 장치에서 전체 RAM에 접근하기 위해 레지스터 뱅크 스위칭이 필요하다. 연산과 레지스터는 직교하지 않아, 일부 명령어는 RAM 및/또는 즉시 상수를 지정할 수 있지만, 다른 명령어는 누산기만 사용할 수 있다.다음과 같은 스택 제약 사항은 '''PIC18''' 시리즈에서 해결되었지만, 이전 코어에는 여전히 적용된다. 하드웨어 호출 스택은 주소 지정이 불가능하므로, 선점형 태스크 스위칭을 구현할 수 없다. 소프트웨어로 구현된 스택은 효율적이지 않으므로, 재진입 가능한 코드를 생성하고 지역 변수를 지원하기 어렵다.
페이지 프로그램 메모리를 사용하면, CALL과 GOTO에 대한 페이지 크기와 계산된 GOTO (일반적으로 테이블 조회에 사용됨)에 대한 페이지 크기, 두 가지 페이지 크기에 대해 신경 써야 한다. 예를 들어, PIC16에서 CALL과 GOTO는 11비트 주소 지정을 가지므로 페이지 크기는 2048개의 명령어 단어이다. PCL에 더하는 계산된 GOTO의 경우 페이지 크기는 256개 명령어 단어이다. 두 경우 모두, 상위 주소 비트는 PCLATH 레지스터에 의해 제공된다. 이 레지스터는 페이지 간 제어가 전송될 때마다 변경되어야 한다. PCLATH는 또한 모든 인터럽트 처리기에 의해 보존되어야 한다.
5. 하드웨어 기능
PIC 장치는 일반적으로 다음과 같은 특징을 갖는다.
- 플래시 메모리 (프로그램 메모리, MPLAB 장치를 사용하여 프로그래밍)
- SRAM (데이터 메모리)
- EEPROM (런타임 시 프로그래밍 가능)
- 슬립 모드 (절전)
- Watchdog 타이머
- 다양한 크리스탈 또는 RC 발진기 구성, 또는 외부 클럭
모든 PIC에 탑재된 기능(*가 붙은 부기능만 비탑재 기종도 있음)은 다음과 같다.
- 발진 회로
- 외부 발진 회로
- 수정 진동자 발진
- 외부에서 클록을 공급
- RC 발진*
- 내부 발진 회로* (RC 발진 회로, 4-16MHz 정도)
- 고정밀도(오차 ±1-5% 정도) 내부 발진 회로* (품종에 따라서는 공장 출하 시에 교정값이 프로그램 플래시의 특정 주소에 기록되어 있으므로, 이것을 삭제하지 않도록 주의해야 함)
- PLL 회로(클록 소스를 3배 또는 4배 할 수 있음)*
- 리셋 (프로그램의 처음으로 돌아감)
- RESET 단자에 의한 것
- 워치독 타이머(WDT)*에 의한 것
- 인터럽트
- 외부 인터럽트
- 핀 변화*
- INT 핀
- 내부 인터럽트
- AD 변환 완료*
- EEPROM에 쓰기 완료*
- 타이머 오버플로우(자릿수 넘침)
- 슬립 (동작을 정지하고 저소비 전력이 됨)
일부 품종에 탑재된 기능은 다음과 같다.
- CCP 기능 (캡처, 비교, PWM의 머리글자)
- 캡처
- 비교
- PWM (온과 오프의 비율로 모터의 속도 제어나 LED의 밝기 제어 가능)
- 타이머 (카운트 업)
- AD 변환 (아날로그 → 디지털 변환)
- DA 변환 (디지털 → 아날로그 변환)
- 비교기 (비교)
- 시리얼 통신
- USB (18F 시리즈 이상 일부)
- SPI
- I2C
- USART
- CAN
- 병렬 통신
- WDT - 정지/폭주를 회피하기 위한 감시 타이머
- JTAG 프로그래밍 (24F와 dsPIC33F 시리즈만)
- USB On-The-Go 기능
5. 1. 변형
PIC 마이크로컨트롤러는 칩의 하드웨어 리소스에 따라 다양한 변형이 존재한다.- 범용 I/O 핀
- 내부 클럭 발진기
- 8/16/32 비트 타이머
- 동기/비동기 직렬 인터페이스 USART
- I²C 및 SPI 통신을 위한 MSSP 주변 장치
- 캡처/비교 및 PWM 모듈
- 아날로그-디지털 변환기 (최대 ~1.0 Msps)
- USB, Ethernet, CAN 인터페이스 지원
- 외부 메모리 인터페이스
- 통합 아날로그 RF 프론트 엔드 (PIC16F639 및 rfPIC).
- KEELOQ 롤링 코드 암호화 주변 장치 (인코딩/디코딩)
- 기타 다수
EPROM 저장 방식을 사용한 1세대 PIC는 거의 대부분 플래시 메모리 칩으로 대체되었다. PIC1650과 그 후속 제품에 사용된 12비트 명령어 집합은 14비트 및 16비트 명령어 집합으로 대체되었다. 마이크로칩은 레거시 지원 또는 대량 주문을 위해 일부 EPROM 기반 PIC의 OTP(일회용 프로그래밍 가능) 및 창형(UV 소거 가능) 버전을 계속 판매하고 있다. 마이크로칩 웹사이트는 전기적으로 지울 수 없는 PIC를 OTP로 나열하며, UV 소거 가능 창형 버전은 주문할 수 있다.
모든 PIC에는 다음과 같은 기능이 탑재되어 있다(*가 붙은 부기능은 일부 기종에서만 지원).
- 발진 회로
- 외부 발진 회로
- 수정 진동자 발진
- 외부 클록 공급
- RC 발진*
- 내부 발진 회로* (RC 발진 회로, 4-16MHz 정도)
- 고정밀도(오차 ±1-5% 정도) 내부 발진 회로* (품종에 따라 공장 출하 시 교정값이 프로그램 플래시의 특정 주소에 기록, 삭제 주의)
- PLL 회로(클록 소스를 3배 또는 4배 가능)*
- 리셋 (프로그램 처음으로 복귀)
- RESET 단자에 의한 것
- 워치독 타이머(WDT)*에 의한 것
- 인터럽트
- 외부 인터럽트
- 핀 변화*
- INT 핀
- 내부 인터럽트
- AD 변환 완료*
- EEPROM에 쓰기 완료*
- 타이머 오버플로우(자릿수 넘침)
- 슬립 (동작 정지 및 저소비 전력)
일부 품종에는 다음과 같은 기능이 탑재되어 있다.
- CCP 기능 (캡처, 비교, PWM의 머리글자)
- 캡처
- 비교
- PWM (모터 속도, LED 밝기 제어)
- 타이머 (카운트 업)
- AD 변환 (아날로그 → 디지털 변환)
- DA 변환 (디지털 → 아날로그 변환)
- 비교기 (비교)
- 시리얼 통신
- USB (18F 시리즈 이상 일부)
- SPI
- I2C
- USART
- CAN
- 병렬 통신
- WDT - 정지/폭주 회피용 감시 타이머
- JTAG 프로그래밍 (24F와 dsPIC33F 시리즈만)
- USB On-The-Go 기능
5. 2. 부품 번호
PIC 마이크로 부품 번호의 'F'는 일반적으로 해당 PIC 마이크로가 플래시 메모리를 사용하며 전자적으로 지울 수 있음을 나타낸다.[35] 반대로 'C'는 다이를 자외선에 노출시켜야만 지울 수 있음을 의미하는데, 이는 창이 있는 패키지 스타일이 사용되는 경우에만 가능하다.[35] 이 규칙의 예외는 EEPROM/Electrically Erasable Programmable Read-Only Memory영어을 사용하므로 전기적으로 지울 수 있는 PIC16C84이다.이름에 'L'이 있으면 해당 부품이 더 낮은 전압에서 작동하며, 종종 주파수 제한이 부과된다.[35] 3~3.6볼트의 엄격한 범위 내에서 저전압 작동을 위해 특별히 설계된 부품은 부품 번호에 'J'로 표시된다.[35] 이 부품들은 또한 최대 5V의 입력을 허용하므로 고유하게 I/O 내성이 있다.[35]
6. 제품군
PIC 마이크로칩은 하버드 아키텍처로 설계되었으며 다양한 장치 제품군으로 제공된다. 기본 및 중급 제품군은 8비트 폭의 데이터 메모리를 사용하고, 고급 제품군은 16비트 데이터 메모리를 사용한다. 최신 시리즈인 PIC32MZ는 32비트 MIPS 명령어 집합 기반 마이크로컨트롤러이다. 명령어 워드 크기는 12비트 (PIC10 및 PIC12), 14비트 (PIC16) 및 24비트 (PIC24 및 dsPIC)이다. 기계어 명령어의 이진 표현은 제품군별로 다르며 PIC 명령어 목록에 나와 있다.
이러한 제품군 내에서, 장치는 PICnnCxxx (CMOS) 또는 PICnnFxxx (Flash)로 지정될 수 있다. "C" 장치는 일반적으로 "새로운 개발에 적합하지 않음"으로 분류된다 (Microchip에서 적극적으로 홍보하지 않음). "C" 장치의 프로그램 메모리는 OTP, ROM 또는 EEPROM으로 다양하게 설명된다. 2016년 10월 현재, "생산 중"으로 분류된 유일한 OTP 제품은 pic16HV540이다. 석영 창이 있는 "C" 장치 (UV 소거용)는 일반적으로 더 이상 사용할 수 없다.
=== PIC10 및 PIC12 ===
PIC10 및 PIC12 계열 마이크로컨트롤러는 12비트 폭의 코드 메모리, 32바이트 레지스터 파일, 그리고 2단계 깊이의 호출 스택을 갖추고 있다. 이들은 6핀에서 40핀에 이르는 다양한 패키지로 제공된다.
레지스터 파일의 처음 7~9바이트는 특수 목적 레지스터로 사용되며, 나머지 바이트는 범용 RAM으로 활용된다. 포인터는 레지스터 쌍을 통해 구현되며, FSR(파일 선택 레지스터)에 주소를 쓰고 INDF(간접 f) 레지스터를 통해 간접적으로 해당 주소에 접근한다. 뱅크 RAM이 구현된 경우 FSR의 상위 3비트를 통해 뱅크 번호를 선택하며, 이는 레지스터 번호 16–31에 영향을 준다. 레지스터 0–15는 뱅크 선택 비트의 영향을 받지 않는 글로벌 영역이다.
5비트의 제한된 레지스터 공간으로 인해, 자주 사용되지 않는 4개의 레지스터는 별도의 주소 없이 특수 명령어(OPTION, TRIS)를 통해 접근한다.
ROM 주소 공간은 512이며, 각 512단어 페이지의 전반부만 주소 지정이 가능하다. CALL 명령어는 주소의 하위 9비트를 지정하지만, 실제로는 하위 8비트만 매개변수로 사용되고, 9번째 비트(비트 8)는 명령어 자체에 의해 0으로 설정된다.
룩업 테이블은 계산된 GOTO(PCL 레지스터에 할당)를 RETLW 명령어 테이블로 구현하여 사용한다. RETLW는 서브루틴 반환과 동시에 W 레지스터에 8비트 즉시 상수를 로드하는 기능을 수행한다.
이 "기본 코어"는 인터럽트를 지원하지 않으며, 모든 입출력은 폴링 방식으로 처리해야 한다. 인터럽트 지원 및 4단계 호출 스택을 갖춘 "향상된 기본" 변형도 존재한다.
PIC10F32x 장치는 256 또는 512단어의 중간 범위 14비트 폭 코드 메모리, 64바이트 SRAM 레지스터 파일 및 8단계 깊이의 하드웨어 스택을 갖추고 있다. 6핀 SMD 및 8핀 DIP 패키지로 제공되며(두 핀은 미사용), 하나의 입력 전용 핀과 세 개의 I/O 핀을 사용할 수 있다. 다양한 인터럽트가 제공된다. 클럭은 소프트웨어를 통해 선택 가능한 16MHz 내부 보정 고주파 발진기와 31kHz 저전력 소스를 제공한다.
베이스라인 시리즈(명령어 12비트 길이 코어)의 PIC10 계열은 모두 6핀이다(표면 실장 패키지 기준, DIP는 NC 2핀을 포함하여 8핀). PIC12 계열은 초기부터 8핀 시리즈로 제공되었으며, 초기에는 12비트 코어였으나, 이후 14비트 코어 및 Enhanced 미드레인지(확장판 명령어 14비트 길이 코어) 품종도 추가되었다.
=== PIC16 ===

PIC16 장치는 14비트 폭의 코드 메모리와 향상된 8단계 깊이의 호출 스택을 특징으로 한다. 명령어 집합은 기본 장치와 거의 다르지 않지만, 두 개의 추가 opcode 비트를 통해 128개의 레지스터와 2048개의 코드 워드를 직접 주소 지정할 수 있다. 중급 코어는 PIC12 및 PIC16으로 레이블이 지정된 대부분의 장치에서 사용할 수 있다.
레지스터 공간의 처음 32바이트는 특수 목적 레지스터에 할당되고, 나머지 96바이트는 범용 RAM에 사용된다. 뱅크 RAM을 사용하는 경우, 상위 16개 레지스터(0x70–0x7F)는 상태 레지스터를 포함하여 몇 가지 가장 중요한 특수 목적 레지스터와 마찬가지로 전역적이며, 상태 레지스터는 RAM 뱅크 선택 비트를 유지한다.
PCLATH 레지스터는 PCL 레지스터에 대한 쓰기에 의해 제공되는 8비트 또는 `GOTO` 또는 `CALL` 명령에 의해 제공되는 11비트가 사용 가능한 ROM 공간을 주소 지정하기에 충분하지 않을 때 상위 명령어 주소 비트를 제공한다.
; 명령어 길이 12, 14비트 코어 시리즈의 특징
:* CPU의 내장 레지스터는 W 레지스터(누산기) 하나뿐이다. 데이터 메모리 공간에는 SFR (Special Function Register)과 GPR(General Purpose Register, 이른바 RAM)이 혼재되어 있다.
:* 데이터 메모리 공간은 "레지스터 파일"이라고 불리며, 주소 0x00-0x7F (명령어 길이 12비트 코어의 경우 0x00-0x1F)를 레지스터처럼 빠르게 접근할 수 있지만, 이 범위를 초과하는 주소는 뱅크 전환으로 접근해야 한다.
:* GOTO, CALL 명령어의 주소 지정부가 제한되어 있기 때문에, 일정 크기 이상의 프로그램은 페이지 전환을 필요로 한다.
:* 상수 테이블을 만들 수 없으므로, 리터럴을 W 레지스터에 반환하는 리턴 명령어 (RETLW)를 나열하여 대용한다.
:* 일반적인 CPU와 같은 점프 대상을 지정할 수 있는 조건 점프 명령어를 가지고 있지 않으며, "비트 테스트 결과로 다음 명령어를 스킵"하는 BTFSC, BTFSS 명령어뿐이다.
:* 명령어 길이 12비트 코어는 인터럽트 기구를 가지고 있지 않다. 인터럽트 기구가 있는 14비트 코어에서도, 인터럽트 시 자동 컨텍스트 저장은 전혀 이루어지지 않으므로 프로그램으로 대응할 필요가 있다.
:* 스택은 일반적인 CPU처럼 데이터 메모리 공간을 사용하는 것이 아니라, RETURN 계열 명령어의 반환 대상을 쌓기 위한 전용 메모리가 준비되어 있다(하드웨어 스택). 단수는 명령어 길이 12비트 코어에서는 2레벨, 명령어 길이 14비트 코어에서는 8레벨로 제한되어 있다.
:* 오래된 품종에서는 GPIO 출력, 입력 모두 PORTn 레지스터를 사용한다. 비교적 새로운 품종에서는 GPIO 출력 래치 레지스터 LATn이 신설되어 읽기-수정-쓰기 문제에 대응하고 있다.
; 미드레인지 시리즈 (명령어 14비트 길이 코어)
:; PIC16 계열
::; 16F84A
::: 다수의 PIC 입문서에서 다루어진 정석 기종이다.
::; 16F648A
::: 16F84A에 다양한 기능을 추가 탑재, 발진 회로(4MHz) 내장했기 때문에 단독 동작으로 실험할 수 있어서 다루기 쉽고, CCP・USART를 탑재했다.
::; 16F88
::: 18Pin의 PIC에서는 가장 다기능한 기종, A/D 컨버터 탑재, 내장 클럭 8MHz 탑재 (16F84A의 후속)
::; 16F877A
::: 40pin과 I/O의 수도 많고 기능도 16F88 이상, 프로그램 메모리도 8K워드로 대용량이다.
::; 16F887
::: 16F877A의 개량판. 발진 회로를 내장하고, A/D 컨버터의 핀 수가 증가했다.
::; 16F876A
::: 16F877A의 28pin 버전
::; 16F886
::: 16F887의 28pin 버전
::; 16F1827
::: 16F88의 후속
=== PIC17 ===
PIC17 시리즈는 인기를 얻지 못했고, PIC18 아키텍처에 의해 대체되었다.[12] 새로운 설계에는 권장되지 않으며, 사용자에게는 가용성이 제한될 수 있다.
이전 코어에 비해 16비트 너비의 연산 코드(많은 새로운 명령어를 허용)와 16단계 깊이의 호출 스택이 개선되었다. PIC17 장치는 40핀에서 68핀까지의 패키지로 생산되었다.
PIC17 시리즈는 다음과 같은 중요한 새로운 기능을 도입했다:[12]
- 메모리 맵형 누산기
- 코드 메모리에 대한 읽기 접근(테이블 읽기)
- 직접 레지스터-대-레지스터 이동(이전 코어는 누산기를 통해 레지스터를 이동해야 했음)
- 코드 공간을 확장하기 위한 외부 프로그램 메모리 인터페이스
- 8비트 × 8비트 하드웨어 곱셈기
- 두 번째 간접 레지스터 쌍
- 상태 레지스터(ALUSTA)의 제어 비트에 의해 제어되는 자동 증가/자동 감소 어드레싱
중요한 제한 사항은 RAM 공간이 256바이트로 제한되었다는 것이다(26바이트의 특수 기능 레지스터와 232바이트의 범용 RAM). 더 많은 RAM을 지원하는 모델에서는 어색한 뱅크 스위칭이 있었다.
=== PIC18 ===
2000년, 마이크로칩(Microchip)은 PIC18 아키텍처를 선보였다. PIC17 시리즈와 달리, 현재 많은 수의 장치 변형이 제조되고 있으며 매우 인기가 있는 것으로 입증되었다. 이전 장치와 달리, 어셈블리 언어로 프로그래밍되는 경우가 많았지만, C 프로그래밍 언어가 주된 개발 언어가 되었다.[13]
PIC18 시리즈는 PIC17 시리즈의 대부분의 기능과 명령어를 상속하는 동시에 여러 가지 중요한 새로운 기능을 추가했다.
- 호출 스택은 21비트 폭이며 훨씬 더 깊다(31 레벨 깊이).
- 호출 스택을 읽고 쓸 수 있다(TOSU:TOSH:TOSL 레지스터).
- 조건부 분기 명령어
- 인덱스 주소 지정 모드(PLUSW)
- FSR 레지스터가 12비트로 확장되어 전체 데이터 주소 공간을 선형적으로 주소 지정할 수 있다.
- 다른 FSR 레지스터 추가(총 3개로 증가)
RAM 공간은 12비트이며, 4비트 뱅크 선택 레지스터(BSR)와 각 명령어의 8비트 오프셋을 사용하여 주소를 지정한다. 각 명령어의 추가적인 "액세스" 비트는 뱅크 0(''a''=0)과 BSR이 선택한 뱅크(''a''=1) 사이를 선택한다.
STATUS, WREG 및 BSR 레지스터에 대해 1레벨 스택도 사용할 수 있다. 이들은 모든 인터럽트에서 저장되며 반환 시 복원될 수 있다. 인터럽트가 비활성화된 경우 ''s'' 비트를 설정하여(명령어에 ", FAST"를 추가) 서브루틴 호출/반환에도 사용할 수 있다.
자동 증가/감소 기능은 제어 비트를 제거하고 FSR당 4개의 새로운 간접 레지스터를 추가하여 개선되었다. 어떤 간접 파일 레지스터에 액세스하는지에 따라 FSR을 사후 감소, 사후 증가 또는 사전 증가시키거나, W를 FSR에 추가하여 유효 주소를 형성할 수 있다.
더욱 발전된 PIC18 장치에서는 "확장 모드"를 사용할 수 있으며, 이 모드는 컴파일된 코드에 훨씬 더 유리한 주소 지정을 제공한다.
- 새로운 오프셋 주소 지정 모드; 액세스 뱅크에 상대적인 일부 주소는 이제 FSR2 레지스터에 상대적으로 해석된다.
- 몇 가지 새로운 명령어 추가, 특히 FSR 레지스터 조작을 위한 명령어.
PIC18 장치는 여전히 개발되고 있으며(2021년) CIP(Core Independent Peripherals)가 장착되어 있다.
=== PIC24 및 dsPIC ===
2001년, 마이크로칩은 최초의 16비트 마이크로컨트롤러인 dsPIC 계열 칩을 출시했고,[14] 2004년 말 양산에 들어갔다.[14] PIC24 장치는 범용 마이크로컨트롤러로, dsPIC 장치는 추가로 디지털 신호 처리 기능을 포함한다.[14]
이전 PIC 아키텍처와 유사하지만 다음과 같은 중요한 개선 사항이 있다:[15]
- 모든 레지스터는 16비트 너비이다.[15]
- 프로그램 카운터는 22비트이다 (비트 22:1; 비트 0은 항상 0임).[15]
- 명령어는 24비트 너비이다.[15]
- 데이터 주소 공간이 64 KiB로 확장되었다.[15]
- 처음 2 KiB는 주변 제어 레지스터용으로 예약되어 있다.[15]
- RAM이 62 KiB를 초과하지 않는 한 데이터 뱅크 전환이 필요하지 않다.[15]
- "f 오퍼랜드" 직접 주소 지정이 13비트 (8 KiB)로 확장되었다.[15]
- 레지스터-레지스터 연산을 위해 16개의 W 레지스터를 사용할 수 있다.
(하지만 f 오퍼랜드에 대한 연산은 항상 W0을 참조한다.)[15] - 명령어는 바이트 및 (16비트) 워드 형태로 제공된다.[15]
- 스택은 RAM에 있다 (스택 포인터로 W15 사용); 하드웨어 스택은 없다.[15]
- W14는 프레임 포인터이다.[15]
- ROM에 저장된 데이터는 직접 접근할 수 있다 ("프로그램 공간 가시성").[15]
- 다양한 인터럽트 소스에 대한 벡터 인터럽트[15]
dsPIC의 주요 기능은 다음과 같다:[15]
- (16×16)-비트 단일 사이클 곱셈 및 기타 디지털 신호 처리 연산[15]
- 하드웨어 곱셈-누산 (MAC)[15]
- 하드웨어 나눗셈 지원 (32/16비트 나눗셈에 19 사이클)[15]
- 배럴 시프팅 - 누산기와 범용 레지스터 모두에 대해[15]
- 비트 반전[15]
- 루프 인덱싱에 대한 하드웨어 지원[15]
- 주변 직접 메모리 접근[15]
dsPIC은 C로 프로그래밍할 수 있으며, 이는 GCC의 변형인 마이크로칩의 XC16 컴파일러 (구 C30)를 사용한다.[15]
명령어 ROM은 24비트 너비이다. 소프트웨어는 ROM에 16비트 워드로 접근할 수 있으며, 짝수 워드는 각 명령어의 최하위 16비트를 저장하고, 홀수 워드는 최상위 8비트를 저장한다. 홀수 워드의 상위 절반은 0으로 읽힌다. 프로그램 카운터는 23비트 너비이지만 최하위 비트는 항상 0이므로 22개의 수정 가능한 비트가 있다.[15]
명령어는 두 가지 주요 종류로 제공되며, 가장 중요한 연산 (더하기, XOR, 시프트 등)은 두 가지 형태 모두 허용한다. 첫 번째는 지정된 f 레지스터 (즉, RAM의 처음 8K)와 단일 누산기 W0 간의 연산과 결과로 업데이트될 대상을 선택하는 대상 선택 비트를 갖는 클래식 PIC 명령어와 유사하다. 두 번째 형태는 더 일반적이며, 16개의 W 레지스터 중 어떤 것이든 될 수 있는 세 개의 오퍼랜드를 허용한다. 대상과 소스 중 하나는 또한 주소 지정 방식을 지원하여 오퍼랜드가 W 레지스터가 가리키는 메모리에 있을 수 있도록 한다.[15]
=== PIC32M (MIPS 기반) ===
마이크로칩(Microchip)의 PIC32M 제품군은 PIC 상표를 사용하지만, MIPS32 M4K 코어를 기반으로 하는 32비트 마이크로컨트롤러 제품군이다.[16] 2007년 11월에 출시된 PIC32MX 제품군[16]을 시작으로, PIC32MZ, PIC32MM, PIC32MK 등 다양한 하위 제품군이 출시되었다.
PIC32 아키텍처는 마이크로칩 포트폴리오에 다음과 같은 여러 가지 새로운 기능을 도입했다.[54]
- 최고 실행 속도 80 MIPS (120+[17] Dhrystone MIPS @ 80 MHz)
- 최대 512 kB의 플래시 메모리
- 클럭 사이클당 하나의 명령어 실행
- 최초의 캐시 프로세서
- RAM에서 실행 허용
- 풀 스피드 호스트/듀얼 롤 및 OTG USB 기능
- 풀 JTAG 및 2-와이어 프로그래밍 및 디버깅
- 실시간 추적
2013년 11월에는 MIPS M14K 코어를 기반으로 하는 PIC32MZ 시리즈가 출시되었다.[18][19] 이 시리즈는 252MHz 코어 속도, 최대 2MB 플래시 및 512KB RAM, 고속 USB, 암호화 엔진 및 SQI와 같은 새로운 주변 장치를 제공한다.[18][19]
2015년에는 업데이트된 MIPS M5150 Warrior M-class 프로세서를 사용하는 PIC32MZ EF 제품군이 출시되었고,[20][21] 2017년에는 통합 그래픽 컨트롤러, 그래픽 프로세서 및 32MB DDR2 DRAM을 갖춘 PIC32MZ DA 제품군이 출시되었다.[22][23]
2016년 6월에는 저전력 및 저비용 애플리케이션에 특화된 PIC32MM 제품군이 출시되었다.[24] 이 제품군은 코어 독립형 주변 장치, 최대 500nA의 절전 모드, 4 x 4 mm 패키지를 특징으로 한다.[25]
2017년에는 모터 제어, 산업 제어, 사물 인터넷(IIoT) 및 다중 채널 CAN 애플리케이션에 특화된 PIC32MK 제품군이 출시되었다.[26]
=== PIC32C (Arm 기반) ===
마이크로칩의 PIC32C 제품군은 PIC 상표를 사용하지만, 기존 PIC 아키텍처와는 완전히 다른 Arm 프로세서 아키텍처를 사용한다.[27] PIC32C 제품군은 Cortex-M0+, Cortex-M4, Cortex-M7, Cortex-M23 및 Cortex-M33 코어를 사용하는 다양한 라인을 포함한다.[27] 이들은 마이크로칩이 아트멜을 인수하여 얻은 Arm 기반 SAM 시리즈의 MCU와 함께 제공된다.[27]
=== PIC64 ===
마이크로칩은 2024년 7월, PIC 상표를 사용하지만 완전히 다른 아키텍처를 사용하는 고성능 멀티 코어 마이크로프로세서인 PIC64 시리즈를 출시했다.[28] 이 시리즈는 처음에는 RISC-V 명령어 집합을 사용할 예정이지만, ARM Cortex-A 코어를 탑재한 버전도 계획하고 있다.[28] PIC64 시리즈는 지능형 엣지 애플리케이션에 초점을 맞춘 PIC64GX 라인과 방사선 내성을 갖추고 우주 비행 애플리케이션에 초점을 맞춘 PIC64-HPSC 라인을 포함할 예정이다.[29][30]
6. 1. PIC10 및 PIC12
PIC10 및 PIC12 계열 마이크로컨트롤러는 12비트 폭의 코드 메모리, 32바이트 레지스터 파일, 그리고 2단계 깊이의 호출 스택을 갖추고 있다. 이들은 6핀에서 40핀에 이르는 다양한 패키지로 제공된다.레지스터 파일의 처음 7~9바이트는 특수 목적 레지스터로 사용되며, 나머지 바이트는 범용 RAM으로 활용된다. 포인터는 레지스터 쌍을 통해 구현되며, FSR(파일 선택 레지스터)에 주소를 쓰고 INDF(간접 f) 레지스터를 통해 간접적으로 해당 주소에 접근한다. 뱅크 RAM이 구현된 경우 FSR의 상위 3비트를 통해 뱅크 번호를 선택하며, 이는 레지스터 번호 16–31에 영향을 준다. 레지스터 0–15는 뱅크 선택 비트의 영향을 받지 않는 글로벌 영역이다.
5비트의 제한된 레지스터 공간으로 인해, 자주 사용되지 않는 4개의 레지스터는 별도의 주소 없이 특수 명령어(
OPTION, TRIS)를 통해 접근한다.ROM 주소 공간은 512이며, 각 512단어 페이지의 전반부만 주소 지정이 가능하다.
CALL 명령어는 주소의 하위 9비트를 지정하지만, 실제로는 하위 8비트만 매개변수로 사용되고, 9번째 비트(비트 8)는 명령어 자체에 의해 0으로 설정된다.룩업 테이블은 계산된
GOTO(PCL 레지스터에 할당)를 RETLW 명령어 테이블로 구현하여 사용한다. RETLW는 서브루틴 반환과 동시에 W 레지스터에 8비트 즉시 상수를 로드하는 기능을 수행한다.이 "기본 코어"는 인터럽트를 지원하지 않으며, 모든 입출력은 폴링 방식으로 처리해야 한다. 인터럽트 지원 및 4단계 호출 스택을 갖춘 "향상된 기본" 변형도 존재한다.
PIC10F32x 장치는 256 또는 512단어의 중간 범위 14비트 폭 코드 메모리, 64바이트 SRAM 레지스터 파일 및 8단계 깊이의 하드웨어 스택을 갖추고 있다. 6핀 SMD 및 8핀 DIP 패키지로 제공되며(두 핀은 미사용), 하나의 입력 전용 핀과 세 개의 I/O 핀을 사용할 수 있다. 다양한 인터럽트가 제공된다. 클럭은 소프트웨어를 통해 선택 가능한 16MHz 내부 보정 고주파 발진기와 31kHz 저전력 소스를 제공한다.
베이스라인 시리즈(명령어 12비트 길이 코어)의 PIC10 계열은 모두 6핀이다(표면 실장 패키지 기준, DIP는 NC 2핀을 포함하여 8핀). PIC12 계열은 초기부터 8핀 시리즈로 제공되었으며, 초기에는 12비트 코어였으나, 이후 14비트 코어 및 Enhanced 미드레인지(확장판 명령어 14비트 길이 코어) 품종도 추가되었다.
6. 2. PIC16
PIC16 장치는 14비트 폭의 코드 메모리와 향상된 8단계 깊이의 호출 스택을 특징으로 한다. 명령어 집합은 기본 장치와 거의 다르지 않지만, 두 개의 추가 opcode 비트를 통해 128개의 레지스터와 2048개의 코드 워드를 직접 주소 지정할 수 있다. 중급 코어는 PIC12 및 PIC16으로 레이블이 지정된 대부분의 장치에서 사용할 수 있다.
레지스터 공간의 처음 32바이트는 특수 목적 레지스터에 할당되고, 나머지 96바이트는 범용 RAM에 사용된다. 뱅크 RAM을 사용하는 경우, 상위 16개 레지스터(0x70–0x7F)는 상태 레지스터를 포함하여 몇 가지 가장 중요한 특수 목적 레지스터와 마찬가지로 전역적이며, 상태 레지스터는 RAM 뱅크 선택 비트를 유지한다.
PCLATH 레지스터는 PCL 레지스터에 대한 쓰기에 의해 제공되는 8비트 또는 `GOTO` 또는 `CALL` 명령에 의해 제공되는 11비트가 사용 가능한 ROM 공간을 주소 지정하기에 충분하지 않을 때 상위 명령어 주소 비트를 제공한다.
; 명령어 길이 12, 14비트 코어 시리즈의 특징
:* CPU의 내장 레지스터는 W 레지스터(누산기) 하나뿐이다. 데이터 메모리 공간에는 SFR (Special Function Register)과 GPR(General Purpose Register, 이른바 RAM)이 혼재되어 있다.
:* 데이터 메모리 공간은 "레지스터 파일"이라고 불리며, 주소 0x00-0x7F (명령어 길이 12비트 코어의 경우 0x00-0x1F)를 레지스터처럼 빠르게 접근할 수 있지만, 이 범위를 초과하는 주소는 뱅크 전환으로 접근해야 한다.
:* GOTO, CALL 명령어의 주소 지정부가 제한되어 있기 때문에, 일정 크기 이상의 프로그램은 페이지 전환을 필요로 한다.
:* 상수 테이블을 만들 수 없으므로, 리터럴을 W 레지스터에 반환하는 리턴 명령어 (RETLW)를 나열하여 대용한다.
:* 일반적인 CPU와 같은 점프 대상을 지정할 수 있는 조건 점프 명령어를 가지고 있지 않으며, "비트 테스트 결과로 다음 명령어를 스킵"하는 BTFSC, BTFSS 명령어뿐이다.
:* 명령어 길이 12비트 코어는 인터럽트 기구를 가지고 있지 않다. 인터럽트 기구가 있는 14비트 코어에서도, 인터럽트 시 자동 컨텍스트 저장은 전혀 이루어지지 않으므로 프로그램으로 대응할 필요가 있다.
:* 스택은 일반적인 CPU처럼 데이터 메모리 공간을 사용하는 것이 아니라, RETURN 계열 명령어의 반환 대상을 쌓기 위한 전용 메모리가 준비되어 있다(하드웨어 스택). 단수는 명령어 길이 12비트 코어에서는 2레벨, 명령어 길이 14비트 코어에서는 8레벨로 제한되어 있다.
:* 오래된 품종에서는 GPIO 출력, 입력 모두 PORTn 레지스터를 사용한다. 비교적 새로운 품종에서는 GPIO 출력 래치 레지스터 LATn이 신설되어 읽기-수정-쓰기 문제에 대응하고 있다.
; 미드레인지 시리즈 (명령어 14비트 길이 코어)
:; PIC16 계열
::; 16F84A
::: 다수의 PIC 입문서에서 다루어진 정석 기종이다.
::; 16F648A
::: 16F84A에 다양한 기능을 추가 탑재, 발진 회로(4MHz) 내장했기 때문에 단독 동작으로 실험할 수 있어서 다루기 쉽고, CCP・USART를 탑재했다.
::; 16F88
::: 18Pin의 PIC에서는 가장 다기능한 기종, A/D 컨버터 탑재, 내장 클럭 8MHz 탑재 (16F84A의 후속)
::; 16F877A
::: 40pin과 I/O의 수도 많고 기능도 16F88 이상, 프로그램 메모리도 8K워드로 대용량이다.
::; 16F887
::: 16F877A의 개량판. 발진 회로를 내장하고, A/D 컨버터의 핀 수가 증가했다.
::; 16F876A
::: 16F877A의 28pin 버전
::; 16F886
::: 16F887의 28pin 버전
::; 16F1827
::: 16F88의 후속
6. 3. PIC17
PIC17 시리즈는 인기를 얻지 못했고, PIC18 아키텍처에 의해 대체되었다.[12] 새로운 설계에는 권장되지 않으며, 사용자에게는 가용성이 제한될 수 있다.이전 코어에 비해 16비트 너비의 연산 코드(많은 새로운 명령어를 허용)와 16단계 깊이의 호출 스택이 개선되었다. PIC17 장치는 40핀에서 68핀까지의 패키지로 생산되었다.
PIC17 시리즈는 다음과 같은 중요한 새로운 기능을 도입했다:[12]
- 메모리 맵형 누산기
- 코드 메모리에 대한 읽기 접근(테이블 읽기)
- 직접 레지스터-대-레지스터 이동(이전 코어는 누산기를 통해 레지스터를 이동해야 했음)
- 코드 공간을 확장하기 위한 외부 프로그램 메모리 인터페이스
- 8비트 × 8비트 하드웨어 곱셈기
- 두 번째 간접 레지스터 쌍
- 상태 레지스터(ALUSTA)의 제어 비트에 의해 제어되는 자동 증가/자동 감소 어드레싱
중요한 제한 사항은 RAM 공간이 256바이트로 제한되었다는 것이다(26바이트의 특수 기능 레지스터와 232바이트의 범용 RAM). 더 많은 RAM을 지원하는 모델에서는 어색한 뱅크 스위칭이 있었다.
6. 4. PIC18
2000년, 마이크로칩(Microchip)은 PIC18 아키텍처를 선보였다. PIC17 시리즈와 달리, 현재 많은 수의 장치 변형이 제조되고 있으며 매우 인기가 있는 것으로 입증되었다. 이전 장치와 달리, 어셈블리 언어로 프로그래밍되는 경우가 많았지만, C 프로그래밍 언어가 주된 개발 언어가 되었다.[13]PIC18 시리즈는 PIC17 시리즈의 대부분의 기능과 명령어를 상속하는 동시에 여러 가지 중요한 새로운 기능을 추가했다.
- 호출 스택은 21비트 폭이며 훨씬 더 깊다(31 레벨 깊이).
- 호출 스택을 읽고 쓸 수 있다(TOSU:TOSH:TOSL 레지스터).
- 조건부 분기 명령어
- 인덱스 주소 지정 모드(PLUSW)
- FSR 레지스터가 12비트로 확장되어 전체 데이터 주소 공간을 선형적으로 주소 지정할 수 있다.
- 다른 FSR 레지스터 추가(총 3개로 증가)
RAM 공간은 12비트이며, 4비트 뱅크 선택 레지스터(BSR)와 각 명령어의 8비트 오프셋을 사용하여 주소를 지정한다. 각 명령어의 추가적인 "액세스" 비트는 뱅크 0(''a''=0)과 BSR이 선택한 뱅크(''a''=1) 사이를 선택한다.
STATUS, WREG 및 BSR 레지스터에 대해 1레벨 스택도 사용할 수 있다. 이들은 모든 인터럽트에서 저장되며 반환 시 복원될 수 있다. 인터럽트가 비활성화된 경우 ''s'' 비트를 설정하여(명령어에 ", FAST"를 추가) 서브루틴 호출/반환에도 사용할 수 있다.
자동 증가/감소 기능은 제어 비트를 제거하고 FSR당 4개의 새로운 간접 레지스터를 추가하여 개선되었다. 어떤 간접 파일 레지스터에 액세스하는지에 따라 FSR을 사후 감소, 사후 증가 또는 사전 증가시키거나, W를 FSR에 추가하여 유효 주소를 형성할 수 있다.
더욱 발전된 PIC18 장치에서는 "확장 모드"를 사용할 수 있으며, 이 모드는 컴파일된 코드에 훨씬 더 유리한 주소 지정을 제공한다.
- 새로운 오프셋 주소 지정 모드; 액세스 뱅크에 상대적인 일부 주소는 이제 FSR2 레지스터에 상대적으로 해석된다.
- 몇 가지 새로운 명령어 추가, 특히 FSR 레지스터 조작을 위한 명령어.
PIC18 장치는 여전히 개발되고 있으며(2021년) CIP(Core Independent Peripherals)가 장착되어 있다.
6. 5. PIC24 및 dsPIC
2001년, 마이크로칩은 최초의 16비트 마이크로컨트롤러인 dsPIC 계열 칩을 출시했고,[14] 2004년 말 양산에 들어갔다.[14] PIC24 장치는 범용 마이크로컨트롤러로, dsPIC 장치는 추가로 디지털 신호 처리 기능을 포함한다.[14]이전 PIC 아키텍처와 유사하지만 다음과 같은 중요한 개선 사항이 있다:[15]
- 모든 레지스터는 16비트 너비이다.[15]
- 프로그램 카운터는 22비트이다 (비트 22:1; 비트 0은 항상 0임).[15]
- 명령어는 24비트 너비이다.[15]
- 데이터 주소 공간이 64 KiB로 확장되었다.[15]
- 처음 2 KiB는 주변 제어 레지스터용으로 예약되어 있다.[15]
- RAM이 62 KiB를 초과하지 않는 한 데이터 뱅크 전환이 필요하지 않다.[15]
- "f 오퍼랜드" 직접 주소 지정이 13비트 (8 KiB)로 확장되었다.[15]
- 레지스터-레지스터 연산을 위해 16개의 W 레지스터를 사용할 수 있다.
(하지만 f 오퍼랜드에 대한 연산은 항상 W0을 참조한다.)[15] - 명령어는 바이트 및 (16비트) 워드 형태로 제공된다.[15]
- 스택은 RAM에 있다 (스택 포인터로 W15 사용); 하드웨어 스택은 없다.[15]
- W14는 프레임 포인터이다.[15]
- ROM에 저장된 데이터는 직접 접근할 수 있다 ("프로그램 공간 가시성").[15]
- 다양한 인터럽트 소스에 대한 벡터 인터럽트[15]
dsPIC의 주요 기능은 다음과 같다:[15]
- (16×16)-비트 단일 사이클 곱셈 및 기타 디지털 신호 처리 연산[15]
- 하드웨어 곱셈-누산 (MAC)[15]
- 하드웨어 나눗셈 지원 (32/16비트 나눗셈에 19 사이클)[15]
- 배럴 시프팅 - 누산기와 범용 레지스터 모두에 대해[15]
- 비트 반전[15]
- 루프 인덱싱에 대한 하드웨어 지원[15]
- 주변 직접 메모리 접근[15]
dsPIC은 C로 프로그래밍할 수 있으며, 이는 GCC의 변형인 마이크로칩의 XC16 컴파일러 (구 C30)를 사용한다.[15]
명령어 ROM은 24비트 너비이다. 소프트웨어는 ROM에 16비트 워드로 접근할 수 있으며, 짝수 워드는 각 명령어의 최하위 16비트를 저장하고, 홀수 워드는 최상위 8비트를 저장한다. 홀수 워드의 상위 절반은 0으로 읽힌다. 프로그램 카운터는 23비트 너비이지만 최하위 비트는 항상 0이므로 22개의 수정 가능한 비트가 있다.[15]
명령어는 두 가지 주요 종류로 제공되며, 가장 중요한 연산 (더하기, XOR, 시프트 등)은 두 가지 형태 모두 허용한다. 첫 번째는 지정된 f 레지스터 (즉, RAM의 처음 8K)와 단일 누산기 W0 간의 연산과 결과로 업데이트될 대상을 선택하는 대상 선택 비트를 갖는 클래식 PIC 명령어와 유사하다. 두 번째 형태는 더 일반적이며, 16개의 W 레지스터 중 어떤 것이든 될 수 있는 세 개의 오퍼랜드를 허용한다. 대상과 소스 중 하나는 또한 주소 지정 방식을 지원하여 오퍼랜드가 W 레지스터가 가리키는 메모리에 있을 수 있도록 한다.[15]
6. 6. PIC32M (MIPS 기반)
마이크로칩(Microchip)의 PIC32M 제품군은 PIC 상표를 사용하지만, MIPS32 M4K 코어를 기반으로 하는 32비트 마이크로컨트롤러 제품군이다.[16] 2007년 11월에 출시된 PIC32MX 제품군[16]을 시작으로, PIC32MZ, PIC32MM, PIC32MK 등 다양한 하위 제품군이 출시되었다.PIC32 아키텍처는 마이크로칩 포트폴리오에 다음과 같은 여러 가지 새로운 기능을 도입했다.[54]
- 최고 실행 속도 80 MIPS (120+[17] Dhrystone MIPS @ 80 MHz)
- 최대 512 kB의 플래시 메모리
- 클럭 사이클당 하나의 명령어 실행
- 최초의 캐시 프로세서
- RAM에서 실행 허용
- 풀 스피드 호스트/듀얼 롤 및 OTG USB 기능
- 풀 JTAG 및 2-와이어 프로그래밍 및 디버깅
- 실시간 추적
2013년 11월에는 MIPS M14K 코어를 기반으로 하는 PIC32MZ 시리즈가 출시되었다.[18][19] 이 시리즈는 252MHz 코어 속도, 최대 2MB 플래시 및 512KB RAM, 고속 USB, 암호화 엔진 및 SQI와 같은 새로운 주변 장치를 제공한다.[18][19]
2015년에는 업데이트된 MIPS M5150 Warrior M-class 프로세서를 사용하는 PIC32MZ EF 제품군이 출시되었고,[20][21] 2017년에는 통합 그래픽 컨트롤러, 그래픽 프로세서 및 32MB DDR2 DRAM을 갖춘 PIC32MZ DA 제품군이 출시되었다.[22][23]
2016년 6월에는 저전력 및 저비용 애플리케이션에 특화된 PIC32MM 제품군이 출시되었다.[24] 이 제품군은 코어 독립형 주변 장치, 최대 500nA의 절전 모드, 4 x 4 mm 패키지를 특징으로 한다.[25]
2017년에는 모터 제어, 산업 제어, 사물 인터넷(IIoT) 및 다중 채널 CAN 애플리케이션에 특화된 PIC32MK 제품군이 출시되었다.[26]
6. 7. PIC32C (Arm 기반)
마이크로칩의 PIC32C 제품군은 PIC 상표를 사용하지만, 기존 PIC 아키텍처와는 완전히 다른 Arm 프로세서 아키텍처를 사용한다.[27] PIC32C 제품군은 Cortex-M0+, Cortex-M4, Cortex-M7, Cortex-M23 및 Cortex-M33 코어를 사용하는 다양한 라인을 포함한다.[27] 이들은 마이크로칩이 아트멜을 인수하여 얻은 Arm 기반 SAM 시리즈의 MCU와 함께 제공된다.[27]6. 8. PIC64
마이크로칩은 2024년 7월, PIC 상표를 사용하지만 완전히 다른 아키텍처를 사용하는 고성능 멀티 코어 마이크로프로세서인 PIC64 시리즈를 출시했다.[28] 이 시리즈는 처음에는 RISC-V 명령어 집합을 사용할 예정이지만, ARM Cortex-A 코어를 탑재한 버전도 계획하고 있다.[28] PIC64 시리즈는 지능형 엣지 애플리케이션에 초점을 맞춘 PIC64GX 라인과 방사선 내성을 갖추고 우주 비행 애플리케이션에 초점을 맞춘 PIC64-HPSC 라인을 포함할 예정이다.[29][30]7. 개발 도구
마이크로칩은 무료 통합 개발 환경(IDE)인 MPLAB X를 제공하며, 여기에는 어셈블러, 링커, 소프트웨어 시뮬레이터, 디버거가 포함된다.[34] 마이크로칩은 또한 MPLAB X와 통합되는 C 컴파일러 (XC 시리즈)를 판매하며,[34] 무료 버전도 제공하지만 최적화 기능에 제한이 있다.[36]
PIC 어셈블리 언어는 RISC 명령어 집합으로 인해 전체 흐름을 파악하기 어려울 수 있지만, 매크로를 사용하면 가독성을 높일 수 있다. 예를 들어, 패럴랙스](Parallax, Inc.) PIC 어셈블러("SPASM")는 mov b, a, add b, a, cjne a, b, dest와 같은 매크로 명령어를 제공한다.
타사 C 컴파일러로는 CCS, HI-TECH, mikroC 등이 있으며, 이들 역시 MPLAB에 통합되거나 자체 IDE를 갖추고 있다. meLabs, Inc.에서는 PICBASIC 언어용 컴파일러를 제공하며, 미크로일렉트로니카(Mikroelektronika)는 C, BASIC, Pascal 프로그래밍 언어로 PIC 컴파일러를 제공한다. 그래픽 프로그래밍 언어인 플로우코드(Flowcode)를 사용하여 8비트 및 16비트 PIC 장치를 프로그래밍할 수도 있다.
프로테우스 디자인 스위트(Proteus Design Suite)를 사용하면 회로도에서 PIC에 연결된 다른 회로와 함께 많은 8비트 및 16비트 PIC 장치를 시뮬레이션할 수 있다.[37] 시뮬레이션할 프로그램은 프로테우스 자체, MPLAB 또는 다른 개발 도구 내에서 개발할 수 있다.[37]
마이크로칩은 윈도우(x86/x64), Linux 32-Bit 및 Linux 64-Bit (32-Bit 호환 라이브러리 필요), Mac(10.X)용 MPLAB XC 컴파일러를 무료로 제공하며, 출시된 모든 PIC 마이크로컴퓨터를 지원한다. Free 버전은 PRO 버전과 동일한 장치와 명령어를 지원하며, 사용 시간과 메모리 사용량에도 제한이 없고, 대부분의 용도에서 충분한 코드 최적화 기능을 갖추고 있다.
HI-TECH PIC C 컴파일러는 MPLAB에 통합하는 것 외에 이클립스를 기반으로 한 독자적인 IDE에서 사용할 수 있다.
mikroElektronika mikroC for PIC는 SD 카드나 문자 LCD를 포함한 많은 라이브러리가 기본으로 제공되며, 독자적인 IDE를 가지고 있다.
8. 디바이스 프로그래머
프로그래머는 대상 PIC에 프로그램 코드를 넣는 데 사용되는 장치이다. 마이크로칩의 대부분의 PIC는 ICSP(In-circuit serial programming, 회로 내 직렬 프로그래밍) 및/또는 LVP(저전압 프로그래밍) 기능을 갖추고 있어 PIC를 대상 회로에 장착된 상태에서 프로그래밍할 수 있다.
마이크로칩은 MPLAB 및 PICKit 시리즈의 프로그래머/디버거를 제공한다. MPLAB ICD4 및 MPLAB REAL ICE는 전문 엔지니어를 위한 프로그래머 및 디버거이며, PICKit 3는 취미 생활가와 학생들을 위한 저가형 프로그래머/디버거 라인이다.
대부분의 고급 플래시 기반 PIC는 자체 프로그래밍(자신의 프로그램 메모리에 쓰기)을 할 수 있으며, 이를 부트로딩이라고 한다. 데모 보드는 RS-232 또는 USB와 같은 인터페이스를 통해 사용자 프로그램을 로드하는 데 사용할 수 있는 작은 공장 프로그래밍된 부트로더와 함께 제공되므로 프로그래머 장치가 필요하지 않다. 또는 ICSP를 사용하여 PIC에 로드할 수 있는 부트로더 펌웨어가 있다. 부트로더를 PIC에 프로그래밍한 후, 사용자는 특수 컴퓨터 소프트웨어와 함께 RS232 또는 USB를 사용하여 장치를 다시 프로그래밍할 수 있다.
ICSP에 비해 부트로더의 장점은 더 빠른 프로그래밍 속도, 프로그래밍 후 즉시 프로그램 실행, 그리고 동일한 케이블을 사용하여 디버깅과 프로그래밍을 모두 할 수 있다는 것이다.
PIC 마이크로컨트롤러용 프로그래머는 ICSP에 의존하여 호스트 컴퓨터에서 직접 코드를 다운로드하는 매우 단순한 설계부터, 여러 공급 전압에서 장치를 확인할 수 있는 지능형 프로그래머에 이르기까지 다양하다. 지능형 프로그래머는 인서킷 프로그래밍을 지원하지 않는 초기 PIC 모델(대부분 EPROM 유형)을 프로그래밍하는 데 필요하다.
타사 프로그래머는 직접 제작 계획에서부터 자체 조립 키트, 완전 테스트를 거친 즉시 사용 가능한 장치에 이르기까지 다양하다. 일부는 PC가 저수준 프로그래밍 신호 처리를 수행해야 하는 단순한 설계(시리얼 또는 병렬 포트에 연결되며 몇 가지 간단한 구성 요소로 구성됨)이고, 다른 일부는 프로그래밍 로직이 내장되어 있다(일반적으로 시리얼 또는 USB 연결을 사용하고, 일반적으로 더 빠르며, 제어를 위해 자체 PIC를 사용하여 구축되는 경우가 많음).
9. 디버깅
최신 PIC 장치는 모두 CPU 코어에 내장된 ICD(In-Circuit Debugging, 인 회로 디버깅) 인터페이스를 갖추고 있으며, 이는 MPLAB IDE와 함께 프로그램의 대화형 디버깅을 가능하게 한다.[38] MPLAB ICD 및 MPLAB REAL ICE 디버거는 ICSP 인터페이스를 사용하여 이 인터페이스와 통신할 수 있다.[38]
이 디버깅 시스템에는 몇 가지 단점이 있다.[38] 제한된 중단점 수(구형 장치에서는 1개, 신형 장치에서는 3개), 일부 I/O 손실(디버깅 전용 라인을 가진 일부 표면 실장 44핀 PIC 제외) 및 일부 온칩 기능 손실이 발생한다.[38]
일부 장치는 비용 또는 핀 부족으로 인해 온칩 디버그를 지원하지 않는다.[38] 일부 대형 칩에도 디버그 모듈이 없다.[38] 이러한 장치를 디버깅하려면 전용 포트를 제공하는 도터 보드에 장착된 칩의 특수 -ICD 버전이 필요하다.[38] 이러한 일부 디버그 칩은 도터 보드에서 선택 가능한 점퍼를 사용하여 둘 이상의 칩 유형으로 작동할 수 있다.[38] 이를 통해 온칩 주변 장치를 모두 갖추지 않은 광범위하게 동일한 아키텍처를 단일 -ICD 칩으로 대체할 수 있다.[38] 예를 들어, 16F690-ICD는 다섯 개의 온칩 주변 장치 중 전부, 일부 또는 아무것도 갖추지 않은 6가지 다른 부품 중 하나로 작동한다.[38]
마이크로칩은 세 가지 전체 인-서킷 에뮬레이터를 제공한다. MPLAB ICE2000 (병렬 인터페이스, USB 변환기 사용 가능), 최신 MPLAB ICE4000 (USB 2.0 연결), 그리고 가장 최근의 REAL ICE (USB 2.0 연결)가 그것이다. 이러한 모든 도구는 일반적으로 대상 장치에서 실행되는 코드의 소스 수준 대화형 디버깅을 위해 MPLAB IDE와 함께 사용된다.
9. 1. 인-서킷 디버깅 (ICD)
최신 PIC 장치는 모두 CPU 코어에 내장된 ICD(In-Circuit Debugging, 인 회로 디버깅) 인터페이스를 갖추고 있으며, 이는 MPLAB IDE와 함께 프로그램의 대화형 디버깅을 가능하게 한다.[38] MPLAB ICD 및 MPLAB REAL ICE 디버거는 ICSP 인터페이스를 사용하여 이 인터페이스와 통신할 수 있다.[38]이 디버깅 시스템에는 몇 가지 단점이 있다.[38] 제한된 중단점 수(구형 장치에서는 1개, 신형 장치에서는 3개), 일부 I/O 손실(디버깅 전용 라인을 가진 일부 표면 실장 44핀 PIC 제외) 및 일부 온칩 기능 손실이 발생한다.[38]
일부 장치는 비용 또는 핀 부족으로 인해 온칩 디버그를 지원하지 않는다.[38] 일부 대형 칩에도 디버그 모듈이 없다.[38] 이러한 장치를 디버깅하려면 전용 포트를 제공하는 도터 보드에 장착된 칩의 특수 -ICD 버전이 필요하다.[38] 이러한 일부 디버그 칩은 도터 보드에서 선택 가능한 점퍼를 사용하여 둘 이상의 칩 유형으로 작동할 수 있다.[38] 이를 통해 온칩 주변 장치를 모두 갖추지 않은 광범위하게 동일한 아키텍처를 단일 -ICD 칩으로 대체할 수 있다.[38] 예를 들어, 16F690-ICD는 다섯 개의 온칩 주변 장치 중 전부, 일부 또는 아무것도 갖추지 않은 6가지 다른 부품 중 하나로 작동한다.[38]
9. 2. 인-서킷 에뮬레이터
마이크로칩은 세 가지 전체 인-서킷 에뮬레이터를 제공한다. MPLAB ICE2000 (병렬 인터페이스, USB 변환기 사용 가능), 최신 MPLAB ICE4000 (USB 2.0 연결), 그리고 가장 최근의 REAL ICE (USB 2.0 연결)가 그것이다. 이러한 모든 도구는 일반적으로 대상 장치에서 실행되는 코드의 소스 수준 대화형 디버깅을 위해 MPLAB IDE와 함께 사용된다.10. 운영 체제
PIC 프로젝트는 태스크 스케줄링 및 우선 순위 지정을 위해 FreeRTOS, AVIX RTOS, uRTOS, Salvo RTOS 또는 기타 유사한 라이브러리와 같은 실시간 운영 체제(RTOS)를 활용할 수 있다.[39]
세르게 바쿨렌코(Serge Vakulenko)의 오픈 소스 프로젝트는 2.11BSD를 RetroBSD라는 이름으로 PIC32 아키텍처에 맞게 조정했다. 이는 온보드 개발 환경을 포함하여 친숙한 유닉스 계열 운영 체제를 온보드 하드웨어 제약 내에서 마이크로컨트롤러에 제공한다.[39]
11. 클론
패럴랙스(Parallax, Inc.)는 패럴랙스 SX(Parallax SX)로 알려진 PIC 마이크로와 유사한 마이크로컨트롤러를 생산했으나 현재는 단종되었다. BASIC Stamp의 초기 버전에서 사용된 PIC 마이크로컨트롤러와 구조적으로 유사하도록 설계된 SX 마이크로컨트롤러는 해당 제품의 여러 후속 버전에서 PIC를 대체했다.
러시아의 PKK Milandr는 1886 시리즈로 PIC17 아키텍처를 사용하여 마이크로컨트롤러를 생산한다.[40][41][42][43] 프로그램 메모리는 1886VE2U (italic=yes/1886ВЕ2Уru)에서 최대 64kB 플래시 메모리 또는 1886VE5U (''1886ВЕ5У'')에서 8kB EEPROM으로 구성된다. 1886VE5U (''1886ВЕ5У'')에서 1886VE7U (''1886ВЕ7У'')까지는 -60 °C에서 +125 °C의 군용 온도 범위에 지정되어 있다. 다양한 부품의 하드웨어 인터페이스에는 USB, CAN, I²C, SPI, A/D 및 D/A 변환기가 포함된다. 내방사선 칩도 있으며, 지정은 1886VE8U (''1886ВЕ8У'') 및 1886VE10U (''1886ВЕ10У'')이다.[44]
이엘란 마이크로일렉트로닉스(ELAN Microelectronics Corp.)는 13비트 명령어와 더 작은 (6비트) RAM 주소 공간을 가진 PIC16 아키텍처 기반의 마이크로컨트롤러 제품군을 생산한다.[45] 홀텍 반도체는 PIC16과 매우 유사한 14비트 명령어 세트를 가진 매우 저렴한 마이크로컨트롤러를 대량으로 생산한다.[46]
저가형 소비 가전 제품에서 흔히 사용되는 아시아 제조사의 초저가 OTP 마이크로컨트롤러는 PIC 아키텍처 또는 수정된 형태를 기반으로 한다. 대부분의 복제품은 기본 부품(PIC16C5x/PIC12C50x)만 대상으로 한다. 마이크로칩(Microchip)은 복제가 특히 심각한 경우 일부 제조업체를 상대로 소송을 시도했지만,[48][49] 성공하지 못했다.[50][51]
12. 한국 내 현황 및 전망
참조
[1]
tech report
PIC1650A 8 Bit Microcomputer
https://web.archive.[...]
General Instrument Corp.
2011-06-29
[2]
웹사이트
PIC16F seminar presentation: History of the Baseline family of Products
https://web.archive.[...]
2011-08-02
[3]
서적
MOS DATA 1976
General Instrument
1976
[4]
웹사이트
1977 Data Catalog: Microelectronics
https://web.archive.[...]
General Instrument Corporation
2011-08-02
[5]
서적
Computer Structures: Principles and Examples
http://archive.compu[...]
McGraw-Hill
2024-08-18
[6]
tech report
PIC1670 8-bit Microcomputer
http://www.t-es-t.hu[...]
2024-08-18
[7]
뉴스
A History of Early Microcontrollers, Part 9: The General Instruments PIC1650
https://www.eejourna[...]
2024-08-18
[8]
간행물
Plessey Satellite Cable TV Integrated Circuit Handbook
1986-05
[9]
뉴스
Microchip offering flash at OTP prices
https://www.eetimes.[...]
2001-08-31
[10]
학술지
Chip Hall of Fame: Microchip Technology PIC 16C84 Microcontroller
https://spectrum.iee[...]
2018-09-16
[11]
웹사이트
Microchip Technology Delivers 12 Billionth PIC® Microcontroller to Leading Motor Manufacturer, Nidec Corporation
http://www.microchip[...]
Microchip press release.
2017-12-21
[12]
웹사이트
PIC17C4x microcontroller data sheet
http://ww1.microchip[...]
Microchip Technology
2016-08-16
[13]
웹사이트
Microchip PIC micros and C - source and sample code
http://www.microchip[...]
2018-04-07
[14]
웹사이트
MICROCHIP TECHNOLOGY DEBUTS WORLD'S HIGHEST PERFORMING 16-BIT MICROCONTROLLERS
http://www.microchip[...]
Microchip
2022-12-14
[15]
웹사이트
PIC24H Family Overview
http://ww1.microchip[...]
2007-09-23
[16]
웹사이트
MIPS32® M4K® Core - MIPS Technologies -MIPS Everywhere - MIPS Technologies
https://web.archive.[...]
2009-01-21
[17]
웹사이트
32-bit PIC MCUs
http://www.microchip[...]
2010-10-13
[18]
웹사이트
32-Bit MCUs - Microchip Technology
https://www.microchi[...]
2018-04-07
[19]
웹사이트
Microchip's PIC32MZ 32-bit MCUs Have Class-Leading Performance of 330 DMIPS and 3.28 CoreMarks™/MHz; 30% Better Code Density
http://www.microchip[...]
Microchip
2022-12-14
[20]
웹사이트
Welcome to the Imagination Blog
http://blog.imgtec.c[...]
2018-04-07
[21]
웹사이트
PIC32MZ EF | Microchip Technology
http://www.microchip[...]
[22]
웹사이트
Microchip Introduces the Industry's First MCU with Integrated 2D GPU and Integrated DDR2 Memory for Groundbreaking Graphics Capabilities
https://www.microchi[...]
2023-08-09
[23]
웹사이트
PIC32MZ DA Family
http://www.microchip[...]
Microchip
2022-12-14
[24]
웹사이트
Microchip Launches Lowest Power, Cost-Effective PIC32 Family - Microchip Technology
https://www.microchi[...]
2018-04-07
[25]
웹사이트
PIC32MM Family of eXtreme Low Power (XLP), Low Cost, 32-bit Microcontrollers
https://www.microchi[...]
2023-08-09
[26]
웹사이트
PIC32MK Family
http://www.microchip[...]
Microchip
2022-12-14
[27]
웹사이트
32-bit PIC® and SAM Microcontrollers
https://www.microchi[...]
Microchip
2024-08-22
[28]
press release
Microchip starts 64bit PIC64 family with RISC-V
https://riscv.org/ne[...]
RISC-V International
2024-07-24
[29]
press release
Microchip Unveils 64-Bit Multi-Core PIC64 Portfolio
https://www.hackster[...]
Microchip
2024-07-24
[30]
press release
Moog Unveils New, Radiation-Hardened Space Computer to Support the Next Generation of High-Speed Computing On-Orbit
https://spacenews.co[...]
Moog Inc.
2024-08-13
[31]
웹사이트
AN869: External Memory Interfacing Techniques for the PIC18F8XXX
http://ww1.microchip[...]
Microchip Technology
2009-08-24
[32]
웹사이트
Microchip Advanced Part Selector
http://www.microchip[...]
Microchip
2022-12-14
[33]
웹사이트
Slowing 208.80.153.50,10-192-48-43&c=1&t=43197.5553483796
http://massmind.org/[...]
2018-04-07
[34]
웹사이트
MPLAB® XC: Compiler Solutions
http://www.microchip[...]
2018-04-07
[35]
웹사이트
3V Design Center
http://www.microchip[...]
2011-08-02
[36]
웹사이트
MPLAB XC8 Compiler for PIC10/12/16/18 MCUs
http://www.microchip[...]
[37]
웹사이트
How to Simulate PIC Microcontroller in Proteus Design Suite 8 - Circuits Gallery
http://www.circuitsg[...]
2016-07-12
[38]
문서
Microchip document No. DS51292R
[39]
웹사이트
start - RetroBSD
http://retrobsd.org/[...]
2018-04-07
[40]
웹사이트
Milandr K1886VE: The PIC That Went to Russia
http://www.cpushack.[...]
The CPU Shack
2016-07-21
[41]
웹사이트
Высокопроизводительные 8-ми разрядные КМОП микроконтроллеры 1886ВЕ1 и 1886ВЕ2. Перечень отличий от ближайшего функционального аналога PIC17C756A.
http://www.milandr.r[...]
PKK Milandr
2017-10-23
[42]
웹사이트
Каталог продукции группы компаний "Миландр" 2017
http://www.milandr.r[...]
PKK Milandr
2018-04-18
[43]
웹사이트
1886ая серия
http://www.155la3.ru[...]
2016-07-21
[44]
웹사이트
Part II: How to "open" microchip and what's inside? Z80, Multiclet, MSP430, PIC and more
https://zeptobars.co[...]
ZeptoBars
2017-04-11
[45]
웹사이트
義隆電子股份有限公司義隆電子,再創未來!
http://www.emc.com.t[...]
[46]
웹사이트
Holtek HT-66
https://jaycarlson.n[...]
2019-07-08
[47]
웹사이트
What's the Cheapest MCU? My Try: Holtek HT48R002 8-bit MCU Selling for $0.085
https://www.cnx-soft[...]
2019-07-08
[48]
간행물
Microchip Technology files copyright infringement suit against MICON Design Technology CO. LTD.
http://ww1.microchip[...]
2017-10-23
[49]
간행물
Microchip Technology takes legal action against Shanghai Haier Integrated Circuit
http://ww1.microchip[...]
2017-10-23
[50]
뉴스
Fight Chinese Counterfeiting? Forget It
https://www.ebnonlin[...]
2013-05-01
[51]
blog
Haier Integrated chip to win the patent battle against US microchip
http://sb2a0.weebly.[...]
2019-07-08
[52]
웹사이트
http://www.microchip[...]
[53]
웹사이트
PIC24H Family Overview
http://ww1.microchip[...]
2007-09-23
[54]
웹사이트
http://www.mips.com/[...]
[55]
웹사이트
http://www.microchip[...]
[56]
웹사이트
http://www.emc.com.t[...]
[57]
웹사이트
Holtek products, by part number
http://www.holtek.co[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com