본문 바로가기

DSP, MCU/펌웨어89

데이터 무결성 검사, 체크섬과 CRC 데이터 또는 파일의 무결성 검사를 위해 체크썸이나 CRC를 사용할 수 있다. 체크섬 체크섬(Checksum)은 중복 검사의 한 형태로, 오류 정정을 통해, 데이터의 무결성을 보호하는 단순한 방법이다. 통신에서 순환 중복 검사(CRC)를 체크섬이라고 말하기도 하지만, 엄밀히 말하면 체크섬은 나열된 데이터를 단순 더하여 체크섬 숫자를 얻고, 정해진 비트수의 모듈러로 정해진 비트수로 재구성 한다. 대중적인 방식이기 때문에 누구나 데이터에 같은 작업을 수행할 수 있고, 무결성 검사에 대한 결과를 비교할 수 있으며, 메시지의 손상여부를 판단할 수 있다. 체크섬 사용 사례 임베디드 시스템에서 C 언어로 작성된 소스 코드를 컴파일러와 링커에 의해 최종 결합하면 기계어 코드의 묶음인 바이너리 파일이 나온다. 이 바이너.. 2023. 2. 11.
Serial EEPROM 과 NAND Flash Memory(USB, SD) 의 비교 EEPROM Flash Memory Electrical Erasable Programmable Read Only Memory solid State Disk NOR cells NAND cells Less Write More Read Both Read Write More Expensive Less Expensive Faster Read Slower Read More Time For Programming Less Time For Programming Less Voltage More Voltage Less Erasing Time More Erasing Time Erase Byte Erase Block or Whole chip Smaller Faster Data Large Data EEPROM과 Flash의 가장.. 2023. 2. 3.
메모리 종류와 세부분류 ROM, RAM, FLASH HTML 삽입 미리보기할 수 없는 소스 1. ROM (Read Only Memory) 비휘발성(Non-volatile) 반도체 저장장치 한번 기록된 정보를 읽은 수만 읽고 수정할 수는 없는 고정 기억장치 다시 쓰고 지울 수 있는 방식에 따라 아래와 같이 구분됨. MASK ROM 부터 점차 발전되 현재 ROM이라고 하면 대부분 EEPROM을 말함 종류 설명 MASK ROM 가장 기본적인 ROM으로 제조과정에서 기록한 내용을 사용자가 수정 불가 PROM (Programmable ROM) 하용자가 한번만 기록 가능 EPROM (Erasable PROM) UV EPROM 강한 자외선으로 데이터 삭제 가능 EEPROM 전기적 기능으로 데이터 삭제 가능 2. RAM (Random Access Memory) 전원이 .. 2023. 2. 3.
부트로더 Boot Loader 부트로더란? 부트로더(bootloader)는 부팅 시 처음으로 실행되는 프로그램으로 Application을 로드하고 실행하는데 필요한 초기 설정을 한다. 부트로더는 주로 ROM, flash 메모리 또는 EEPROM에 저장되어 있으며, 기본적으로는 기기를 켜면서부터 실행된다. Application 업데이트가 필요한 경우 사용될 수 있다. 부트로더를 이해하기 위한 예시 1. 아두이노 아두이노의 경우에도 flash memory 에 프로그램된 on chip bootloader 가 있다. 아두이노가 reset 되는 경우 bootloader 가 가장 먼저 실행된다. bootloader 는 아두이노 스케치를 보드에 다운로드하기 위한 목적으로 사용된다. (IAP, In Application Programming) 아두.. 2023. 2. 1.
LSB, MSB 출처 : https://blog.naver.com/ansdbtls4067/220886567257 LSB와 MSB란 무엇인가? 안녕하세요? 땜쓰 인사드립니다. 오늘은 LSB와 MSB에 대해서 함께 알아보도록 하겠습니다. 우선 이들... blog.naver.com LSB 와 MSB LSB는 Least Significant Bit의 약자로서 하나의 데이터 형에서의 가장 낮은 위치의 Bit를 의미한다. MSB는 Most Significant Bit의 약자로 어떠한 데이터 형의 최상위 비트를 의미한다. LSB 위치는 가장 값이 작은 비트인 2^0에 위치하고 있으므로 LSB의 값을 확인하면 숫자가 짝수인지 홀수인지 쉽게 알아낼 수 있다. 또한 LSB는 프로그래밍시 주로 난수발생 함수, 해시 함수, 검사합(Check.. 2023. 1. 31.
CAN 통신 - 메시지 타입과 구조 CAN 통신 이전글 : 2023.01.24 - [DSP, MCU/펌웨어공부] - CAN 통신 (Controller Area Network) CAN 통신 (Controller Area Network) HTML 삽입 미리보기할 수 없는 소스 CAN 통신(Controller Area Network)은 1980년대 Bosch사에 의해 개발된 메시지 기반 네트워크 프로토콜으로, 차량 내에서 호스트 컴퓨터 없이 마이크로 컨트롤러나 장치 eteo.tistory.com HTML 삽입 미리보기할 수 없는 소스 Data Frame Remote Frame Error Frame Overload Frame 이 중 Error Frame 과 Overload Frame 은 컨트롤러가 알아서 처리하므로 프로그래밍 할 때는 주로 Dat.. 2023. 1. 26.
CAN 통신 (Controller Area Network) HTML 삽입 미리보기할 수 없는 소스 CAN 통신(Controller Area Network)은 1980년대 Bosch사에 의해 개발된 메시지 기반 네트워크 프로토콜으로, 차량 내에서 호스트 컴퓨터 없이 마이크로 컨트롤러나 장치들이 서로 통신하기 위해 설계된 표준 통신 규격이다. HTML 삽입 미리보기할 수 없는 소스 Multi-master serial communication bus. Broadcast type of Bus. (Not point-to-point) Low cost solution. Extreme robustness. (noise-immunity) High data transmission speeds. (up to 1 MBit/sec, High speed CAN 기준) Reliabilit.. 2023. 1. 24.
unsigned int 형 tick 변수가 오버플로우 나는 날 unsigned type 4byte 자료형의 범위는 0 ~4,294,967,295 tick 변수가 s 를 표현하는 경우 대략 49,710일(136년)이 경과하면 오버플로우가 나고, tick 변수가 ms 를 표현하는 경우 대략 49.7일이 경과하면 오버플로우가 난다. 2023. 1. 7.
링 버퍼 Circular Buffer 링 버퍼를 구현하기위해선 큐를 먼저 알아야 한다. 큐는 FIFO(First In First Out) 구조로 먼저들어온 데이터가 먼저 나가는 구조이다. 이와 비교되는 자료구조는 LIFO(Last In First Out) 구조인 스택이 있다. 스택은 나중에 들어온 데이터가 먼저 나오는 구조로 함수 호출을 생각하면 된다. 함수가 호출되면 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 스택에 넣어지고 함수에서 리턴 시 스택에서 반환 주소값을 POP하여 해당 함수가 호출되기 이전 상태로 되돌아 갈 수 있다. 다시 돌아와서 링버퍼란 고정 크기의 큐를 마치 처음과 끝이 연결된 것처럼 사용하는 구조를 말한다. 그리고 버퍼에 쓰고 읽을 위치를 알기 위한 head 와 tail 포인.. 2022. 12. 30.
CAN 통신 ] PCAN 사용하기 PCAN-USB 를 사용하면 PC에서 USB를 통해 CAN 네트워크에 연결할 수 있다. 홈페이지 : https://www.peak-system.com/ 드라이버 다운로드 PCAN-View 다운로드 매뉴얼 결선 2, 7, 3, 6번 핀만 연결해주면 된다. 3은필수이고, 6은 optional ground 이다. 종단저항 관련 최대 버스 길이 PCAN-View 설정 먼저 Bit rate를 맞춘다. 수신 녹화 버튼을 눌러 Trace 를 시작할 수 있다. Trace 탭에서 실시간 수신되는 메시지를 확인할 수 있다. 송신 메시지모양 아이콘을 누르거나 또는 Transmit 메뉴의 New Message를 선택해 전송이 가능하다. Cycle Time 을 설정해 Periodical 송신을 할 수 도 있고 Cycle Tim.. 2022. 12. 22.
정수 리터럴 뒤에 접미사 UL을 붙이는 이유 변수는 선언할 때 자료형의 크기를 정할 수 있지만 리터럴(상수)는 그러지 못하기 때문에 접미사(suffix)를 활용해 크기를 명시적으로 표시한다. 접미사를 붙이지 않은 경우 정수 상수의 타입은 int 이기 때문에 강제로 unsigned long int 로 만들어 주기위해 뒤에 UL을 붙이는 것이다. unsigned type으로 바꾸는 것은 연산 도중 혹시나 overflow가 일어나서 의도하지 않은 결과가 나오는 것을 막기 위함이다. 정수 리터럴 접미사 자료형 생략시 int L long U unsigned int UL unsigned long LL long long ULL unsigned long long 10진수 뿐만 아니라 16진수에도 접미사를 붙일 수 있다. 실수 리터럴 접미사 자료형 생략시 doub.. 2022. 12. 14.
ELF 파일 포맷 ELF 포맷의 Section 구성 ​ ​ ​ ​ ​ 1. Text Segment(=Code Segment) ELF Header : Zero Offset에서 시작하며 파일에 대한 정보를 포함한다. .init : 프로그램 진입 포인트(Entry Point) 실행 이전에 먼저 실행되는 코드가 있는 섹션. main 함수 이전에 프로세스 초기화를 진행하는 코드가 있는 공간이다. .text : 기계어로 변환된 프로그램 코드가 존재하는 공간이다. .rodata : Read-Only 데이터를 의미하며, const, printf, switch case 문에 의한 Jump Table 등이 존재한다. 2. Data Segment .data : 초기값이 있는 전역변수와 static 변수들이 있는 공간이다. .bss : 초기값.. 2022. 12. 2.
심볼 SYMBOL Linker가 알아볼 수 있는 기본 단위이며 Link를 한 후에는 자신만의 주소를 갖게 되는 특별한 단위 Symbol의 이름은 그 Symbol이 갖는 메모리 영역의 시작 주소를 가리키는 Linker만의 pointer같은 존재 Debugging시 Symbol의 이름이 사용됨 Linker만이 이 Symbol을 참조하며, Linker가 Symbol들을 주소로 모두 변환해서 binary로 만듬 (실제로 메모리에 적재되는 것은 아님) 출처 : http://recipes.egloos.com/5009181 2022. 12. 2.
오브젝트 파일 .o .obj 오브젝트 파일(Object File) 어셈블러를 통해 변환된 어셈블리 코드는 이제 더 이상 사람이 알아볼 수 없는 기계어로 변환되는데 이를 오브젝트 코드(목적코드)라 부르고, 오브젝트 코드로 구성된 파일을 오브젝트 파일(Object File)이라 부른다. 이 오브젝트 파일은 특정한 파일 포맷을 가진다. (Windows의 경우 PE(Portable Executable), Linux의 경우 ELF(Executable and Linking Format)) 오브젝트 파일 포맷 Object File Header : 오브젝트 파일의 기초 정보를 가지고 있는 헤더 Text Section : 기계어로 변환된 코드가 들어 있는 부분 Data Section : 데이터(전역 변수, 정적 변수)가 들어 있는 부분 Symbol.. 2022. 12. 2.
컴파일 과정 컴파일 과정 1. Pre-processing 2. Compile 3. Assemble 4. Link 1. Pre-processing 전처리기(Preprocessor)를 통해 소스 코드 파일(*.c)을 전처리된 소스 코드 파일(*.i)로 변환하는 과정 주석 제거 : 소스 코드에서 주석을 전부 제거한다. 헤더 파일 삽입 : #include 지시문을 만나면 해당하는 헤더 파일을 찾아 헤더 파일에 있는 모든 내용을 복사해서 소스 코드에 삽입한다. 즉, 헤더 파일은 컴파일에 사용되지 않고 소스 코드 파일 내에 전부 복사된다. 헤더 파일에 선언된 함수 원형은 후에 링킹 과정을 통해 실제로 함수가 정의되어 있는 오브젝트 파일(컴파일된 소스 코드 파일)과 결합한다. 매크로 치환 및 적용 : #define 지시문에 정의.. 2022. 12. 2.
RS232 등 시리얼 케이블 고장 유무 확인법 사진은 ttl to USB 모듈이긴 하나 사진과 같이 rx, tx 를 쇼트시켜 물리적으로 루프백 환경을 만들고 테스트를 한다. 전압레벨이나 baudrate를 신경쓸 필요는 없다. 시리얼 터미널에서 타이핑(tx)을했을 때 글자가 출력(rx)되야 정상이다. 2022. 12. 1.
EABI 먼저 ABI란 응용 프로그램 이진 인터페이스(Application Binary Interface, ABI)의 약자로 응용 프로그램과 운영 체제 또는 응용 프로그램과 해당 라이브러리 그리고 응용 프로그램의 구성요소 간에서 사용되는 낮은 수준의 인터페이스이다. API가 소스 코드에서 사용된다면 ABI는 바이너리에서 호환이 가능하다는 점이 다르다. 그리고 EABI(임베디드 응용 프로그램 이진 인터페이스, Embedded-Application Binary Interface)는 임베디드 소프트웨어 프로그램을 수행하는 파일 형식, 자료형, 레지스터 사용, 스택 프레임 조직, 명령 변수를 위한 표준 변환을 정의하고 있다. EABI를 지원하는 컴파일러는 이를 지원하는 또 다른 컴파일러가 만든 코드와 호환되는 목적 코드.. 2022. 11. 30.
LwIP 메모리 옵션 설정 lwIP stack 사용 시 메모리 옵션 설정이 매우 중요하며 lwipopts.h 에서 사용자가 재정의 할 수 있다. lwIP Wiki 에서 소개하는 메모리 관리 팁 https://lwip.fandom.com/wiki/Lwipopts.h#Memory_management_(RAM_usage) Lwipopts.h lwipopts.h is a user file that you can use to fully configure lwIP and all of its modules. You do not need to define every option that lwIP provides; if you do not define an option, a default value will be used. Therefore, y.. 2022. 11. 11.
ADC (Analog-to-digital converter) https://microcontrollerslab.com/analog-to-digital-adc-converter-working/ 정의 표본화(Sampling) → 양자화(Quantization) → 부호화(Encoding) 총 3단계를 통해 아날로그(Analog) 신호를 디지털(Digital) 신호로 변환 (A/D 변환)하는 것. 즉 연속적인 analog 신호를 0과 1로 구성된 digital 신호로 변환하는 IC칩이다. 변환과정 1. 샘플링(Sampling) 시간축 방향에서 연속된 아날로그 신호의 진폭치를 일정 간격(샘플링 주기 Ts)으로 샘플을 추출하여 이산신호(discrete signal)로 변환시키는 과정 2. 양자화(Quantization) 샘플 추출한 연속적인 진폭의 신호를 특정 이산진폭값으.. 2022. 10. 12.
LwIP TCP/IP 스택 살펴보기 Developing applications on STM32Cube with LwIP TCP/IP stack LwIP (Lightweight IP)는 임베디드 시스템에서 널리 사용되는 오픈 소스 TCP/IP 스택이다. LwIP TCP/IP stack에서 지원하는 프로토콜 : IPv4, IPv6, ICMP, IGMP, UDP, TCP, DNS, SNMP, DHCP, PPP, ARP LwIP는 아래 3가지 API를 제공한다. Raw API : Native LwIP 로 event callback 형식으로 동작되며 최고의 성능을 제공하지만 사용하기 조금 복잡하다. Netconn API : Raw API 보다 High Level API로 RTOS 환경이 고려된 API이다. Socket API : 리눅스, 윈도우 등.. 2022. 9. 24.
Ethernet, MAC, MII, RMII, PHY MCU에서 이더넷을 하기 위해 필요한 MAC과 PHY 그리고 MII, RMII에 대해 알아보자 아래 사진은 S/W Block과 H/W Block으로 구성된 OSI 7 Layer 이다. 그 중에 MAC과 PHY는 H/W Block에 위치해 있다. MAC은 데이터 링크 계층, PHY는 물리 계층이다. TCP/UDP 와 IP 까지는 S/W 에서 Packet을 만든 다음 전송은 MAC 과 PHY 을 통해서 하게 된다. 이때 MAC 에서 PHY로 DATA가 전송하는 통신 방법으로 MII 와 RMII 등이 있다. 전체적인 흐름은 S/W에서 TCP/IP 또는 UDP/IP Packet을 만든 다음 MAC 으로 전달하고, MAC 에서는 추가로 헤더를 붙여 MII 방식을 통해서 PHY 로 전송하면 PHY 는 디지털 데이터.. 2022. 9. 24.
CPU, MCU, MPU, DSP, FPGA 구분 On chip / SoC On chip은 하나의 IC에 제어, 연산, 입출력, 저장장치가 다 들어 있는 Stand alone 형태를 의미한다. SoC(System on Chip)과 같은 의미로 볼 수 있지만, 보통 SoC를 말하면 On chip + 특수기능을 하나의 칩에 구현하는 것을 의미한다. CPU (Central Processing Unit) CPU는 산술 및 논리 연산 유닛인 ALU(Arithmetic and Logical Unit)와 명령어를 읽어오고 해석해서 각 유닛을 제어하는 CU(Control Unit) 그리고 연산을 수행할 때 필요한 데이터를 빠르게 접근하고 처리하기 위해 사용되는 Register를 묶은 형태이다. CPU는 실행할 프로그램과 데이터, 입출력을 제어하는 역할을 하지만 I/O.. 2022. 9. 10.
빅 엔디안(Big Endian)과 리틀 엔디안(Little Endian) 컴퓨터는 데이터를 메모리에 저장할 때 바이트(byte) 단위로 나눠서 저장한다. 하지만 컴퓨터가 저장하는 데이터는 대게 32비트(4바이트)나 64비트(8바이트)로 구성된다. 따라서 이렇게 연속되는 바이트를 순서대로 저장해야 하는데, 이것을 바이트 저장 순서(바이트 오더 : byte order)라고 한다. 바이트 오더는 빅 엔디안(big endian) 과 리틀 엔디안(little endian) 방식이 있다. 빅 엔디안은 메모리의 Lower Address 에 MSB (최상위비트/Most Significant Bit) 부터 저장하는 방식이고, 리틀 엔디안은 메모리의 Lower Address 에 LSB (최하위비트/Least Significant Bit) 부터 저장하는 방식이다. 아래 예시에서 Data의 MSB.. 2022. 8. 31.
CISC 와 RISC CISC (Complex Instruction Set Computer) 연산에 처리되는 복잡하고 기능이 많은 명령어 집합을 수백 개 이상 탑재하고 있는 프로세서 과거에는 PC 메모리 용량이 크지 않아서 소프트웨어의 용량을 줄이기 위해 하나의 명령어로 여러 작업을 수행하도록 CISC를 많이 사용하였다. 가변 길이 명령어 형식이어서 명령어를 먼저 해석한 후에 실행한다, 명령어 해석에 필요한 회로가 복잡해 병렬 처리가 쉽지 않다 트랜지스터 집적에 있어서 효율성이 떨어지기 때문에, 전력 소모가 크고, 속도가 느리고, 가격이 비싸다는 등의 단점이 있다. 복합적이고 기능이 많기 때문에 하위 호환성이 좋다. 호환성이 필요한 범용 컴퓨터, intel 사의 프로세서에 주로 사용된다. RISC (Reduced Instru.. 2022. 6. 23.
STM32 ] Datasheet 첫 장에 나오는 DMIPS 란 MIPS: Million Instructions Per Second, CPU가 1초 동안 처리할 수 있는 명령어의 수, Million 단위 1MIPS : 1초에 100만개의 명령어를 수행한다는 의미 DIMPS : Dhrystone Millon instructions Per Secone, Dhrystone(드라이스톤) 벤치마크 테스트 결과를 정수화해서 하중한 값. 프로세서의 성능 비교에 이용됨 2022. 6. 23.
Memory mapped I/O 와 I/O mapped I/O CPU가 메모리와 주변장치를 인터페이스 하는 방식에는 아래와 같은 대조적인 2가지 방법이 있다. Memory Mapped I/O 마이크로프로세서(CPU)가 입출력 장치를 액세스할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식. 메모리와 I/O가 연속된 어드레스 영역에 할당되기 때문에 I/O가 차지하는 만큼 메모리 용량은 감소한다. CPU의 입장에서는 메모리와 I/O가 동일한 외부기기로 간주되므로 이들을 액세스하기 위한 제어신호는(read)와(write) 신호뿐이다. 소프트웨어적으로도 메모리에 대한 데이터의 액세스나 I/O에 대한 데이터의 입출력이 동일한 것으로 간주되므로 load나 store 명령에 의해 수행된다. 컴파일러의 최적화를 방지를 위해 I/O 영.. 2022. 6. 23.
STM32 ] __IO , volatile 타입 한정자 (Qualifier) 이에 대한 정의는 Drivers - CMSIS - Include _ core_cm4.h 파일 내에서 찾을 수 있다. /* IO definitions (access restrictions to peripheral registers) */ /** \defgroup CMSIS_glob_defs CMSIS Global Defines IO Type Qualifiers are used \li to specify the access to peripheral variables. \li for automatic generation of peripheral register debug information. */ #ifdef __cplusplus #define __I volatile /*!< Defines 'read onl.. 2022. 6. 23.
GPIO output mode , Push-Pull 과 Open drain 의 차이 출처 : Push-Pull 일때 인풋이 1이면 아웃풋이 1이 나오고 인풋이 0이면 아웃풋이 0이 나온다. Open Drain 일때 단순히 Push-Pull에서 위의 PMOS 트랜지스터가 disabled 된 형태이다. 인풋이 0일때 아웃풋이 0이다. 인풋이 1일때는 아웃풋이 플로팅 상태이다. 이러한 회로는 외부 전원과 풀업저항을 연결해서 사용해야하는데, MCU의 출력레벨인 3.3V가 아닌 레벨이 다른 전원 소스를 사용할 수 있게끔하여 유연성을 제공한다. 또한 오픈드레인은 I2C버스를 구성하는데도 쓰인다. SCL, SDA 라인에는 풀업저항이 달려있고 다수의 디바이스가 연결된 형태로, 통신을 하지 않을 때는 라인이 HIGH상태를 유지하다가 어떤 마스터가 신호를 LOW로 당기고 통신을 시작했을 때 다른 마스터가.. 2022. 6. 5.
비트 마스크 기법 , 원하는 비트만 조작하기 비트 마스크 기법은 정수의 이진수 표현을 자료구조로 쓰는 기법을 말합니다. 아래 숫자를 초기상태로 사용해 예제를 진행해 보겠습니다. 최하위비트는 0번이고 최상위비트는 15번이라고 지칭하겠습니다. 1. 특정 비트를 1로 만들기 |= 연산 사용. 내가 켜고 싶은 비트는 1 나머지는 0 15, 11, 7, 3번 비트 켜기 이전 상태와는 상관없이 다른 비트는 건들지 않고 내가 켜고 싶은 비트만 1로 만듭니다. #include int main() { unsigned short num = 23130; // 0x5a5a num |= 0x8888; printf("0x%04x\n", num); return 0; } 결과 2. 특정 비트를 0으로 만들기 &= 연산 사용. 내가 끄고싶은 비트는 0 나머지는 1. 혹은 내가 .. 2022. 5. 21.