ADC, DIO, FLS, FEE, SPI
ADC; Analog-to-Digital Converter
- ADC 개수: 2개의 ADC 모듈
- 채널 수: 24개의 아날로그 입력 채널
- 해상도: 12비트 SAR(Successive Approximation Register) ADC를 사용하여 최대 4096단계로 아날로그 신호를 디지털화합니다.
- 입력 전압 범위: 0V ~ 5.5V.
- 샘플링 속도: 고속 샘플링이 가능하며, 실시간 데이터 처리가 필요한 애플리케이션에 적합.
기능 - 다중 입력 채널:각 ADC 모듈은 여러 입력 채널을 지원하며, 여러 센서의 데이터를 동시에 처리
- 스캔 모드:여러 채널을 순차적으로 샘플링하는 스캔 기능을 제공
- 결과 저장:변환된 디지털 값은 결과 레지스터에 저장
- 트리거 제어: 소프트웨어 또는 하드웨어 트리거를 통해 변환 작업을 시작할 수 있다
- 오프셋 및 게인 보정: ADC의 정확도를 높이기 위해 오프셋 및 게인 보정을 지원
DIO
mcu의 전원 관리에 대한 이해
regulator의 전원소스를 하나만 구성하지 않고, inhibit, ign
eeprom 을 바로 수정하지 않는 이유는 eeprom의 수명 때문(garbage collection)
- I/O 핀 수: TC234LP는 최대 120개의 디지털 I/O 핀을 제공
- 전압 레벨: 3.3V CMOS 로직 레벨을 지원하며, 일부 핀은 5V 입력 신호를 허용
- 각 핀은 입력 또는 출력으로 설정할 수 있으며, 특정 기능(예: PWM, UART 등)에 할당 가능
기능 - 디지털 입력(Digital Input)
- 외부 신호(예: 버튼, 센서)를 읽어 MCU 내부에서 처리
- 특정 조건에서 인터럽트를 발생시킬 수 있습니다.
- 디지털 출력(Digital Output):외부 장치(예: LED, 릴레이)를 제어하기 위해 디지털 신호를 출력
- 멀티플렉싱(Multiplexing): 하나의 핀에서 여러 기능(UART, SPI, PWM 등)을 지원하며 소프트웨어로 선택 가능
- 풀업/풀다운 저항: 내장된 풀업/풀다운 저항을 통해 안정적인 신호 처리를 지원합니다.
- 고속 GPIO:빠른 응답이 필요한 애플리케이션에서 고속 GPIO 동작을 지원
비휘발성 메모리(NVM; Non-Volatile Memory)
; 전원이 꺼져도 데이터를 유지할 수 있는 저장 기술.
비휘발성 메모리에는 크게 EEPROM과 Flash memory가 존재한다. 둘은 전원이 꺼져도 데이터를 유지할 수 있다는 점에서 공통점을 가진다. 이 둘의 차이를 알아보자.
- EEPROM(Electrically Erasable Programmable Read-Only Memory)
- 바이트 단위 작업: 데이터를 'Byte' 단위로 읽고, 쓰고, 지운다.
- 속도: 상대적으로 느리다.
- 용량: 작다(KB~MB)
- 일반적으로 10만 ~ 100만 번의 쓰기/ 삭제 사이클 지원
- 특정 데이터만 수정이 가능
- Flash Memory
- 블록 단위 작업: Byte 단위로 read할 수 있지만, write는 'Block(=page)'단위로 가능하다.(변형된 EEPROM)
나머지 값은 FEE로 채운다.
- 속도: EEPROM 보다 빠르다.
- 용량: EEPROM 보다 크다(MB~GB)
- 1만~10만 번의 쓰기/ 삭제 사이클
- page 단위 = 8byte. flash는 page 단위로 저장
EEPROM vs Flash Memory 비교
| 특징 | EEPROM | Flash Memory |
|--------------------------|---------------------------------------------|-------------------------------------------|
| 작업 단위 | 바이트 단위로 읽고 쓰기 가능 | 블록 단위로 읽고 쓰기 가능 |
| 속도 | 느림 | 빠름 |
| 용량 | 작음 (몇 KBMB) | 큼 (몇 MBGB) |
| 내구성 | 높은 쓰기/삭제 내구성 (최대 100만 사이클) | 상대적으로 낮은 내구성 (1만~10만 사이클) |
| 비용 | 상대적으로 비쌈 | 저렴 |
| 주요 용도 | 설정값, 소량 데이터 저장 | 펌웨어 및 대용량 데이터 저장 |
-> Flash memory는 EEPROM에 비해 구조가 간단하여 대용량의 데이터를 write 시에는 훨씬 빠르다.
FLS; Flash Driver
; Flash Driver 모듈(Flash 메모리 제어)
; 데이터를 쓰고, 읽고, 지운다.
- AUTOSAR MCAL 표준을 기반으로 플래시 메모리의 읽기, 쓰기, 삭제와 같은 작업 수행
- DFlash(데이터 플래시)와 PFLash(프로그램 플래시)를 관리
- ECU SW의 비휘발성 데이터 저장소를 효율적으로 제어
Fls_17_Pmu
Flash Memory
AURIX™ TC234LP MCU는 내부에 PFlash(Program Flash)와 DFlash(Data Flash)를 포함
- PFlash(Program Flash): 프로그램 코드 저장(최대 2MB)
- DFlash(Data Flash): 데이터 저장 및 EEPROM 에뮬레이션 (최대 128KB)
- 플래시 메모리는 sector단위로 나뉘며, 각 섹터는 독립적으로 관리.
- 플래시메모리는 한번 쓰고 지우고 다시 써야하는데, 지우는 타이밍에 꺼지면 데이터가 날라갈 수 있다. 따라서 두 sector로 나누어 사용한다.
- 언제 그러지? 배터리 방전 시나리오를 만나면, 모든 신호가 켜졌다 꺼졌다를 반복하기 때문에, ignition cycle을 계속 적기 때문에 이때 데이터가 날아갈 수 있음
- 그렇다면 저장할 수 있는 데이터는 128/2 = 64kB인가? 그렇지 X. 더 작다
TC234LP는 별도의 하드웨어 EEPROM이 없지만, DFlash를 이용해 EEPROM 기능을 에뮬레이션할 수 있다.
- DFlash를 소프트웨어적으로 관리하여 바이트 단위 삭제 및 쓰기를 구현.
- 플래시 드라이버(Fls_17_PMU)를 사용하여 DFlash를 제어.
FEE; Flash EEPROM Emulation
; TC234LP MCU에서 플래시 메모리를 활용하여 EEPROM 기능을 에뮬레이션하는 AUTOSAR 기반 소프트웨어 모듈
(MCU에 하드웨어 EEPROM이 없을 경우 플래시 메모리를 사용해 이를 SW로 구현)
;device의 구체적인 주소 지정 기법을 추상화할 뿐 아니라, 상위 layer에게 가상의 주소 지정 기법을 제공
ex. Flash memory에 데이터를 읽고 쓰기 위한 memory address와 관련된 작업.
Flash Memory가 64byte일 때, 저장 공간은 32byte씩 2개의 block으로 나뉘어진다.
i. 데이터를 쓸 때, 한 개의 block에 쓴다.
ii. 이 block에 더이상 데이터를 쓸 공간이 없으면 다른 block에 쓴다.
FEE는 현재 flash memory의 offset을 구하고, block에 데이터를 쓸 수 있는 공간이 얼마나 남았는지를 확인해준다.
,
수명
- Program Flash Retention Time, sector = 20, max = 1000 erase/program cycles
- Data Flash Endurance per EEPROMx sector = 125000
@
Fee, FLS 모듈들은 모두 main function을 가지며 'polling 방식'으로 자신의 상태를 체크한다.
주기적으로 자기의 상태를 계속해서 체크하며 명령을 시킬 준비가 되면 모듈 내에 있는 API가 동작하는 구조이다.
@
NvM이 요청한 데이터를 FEE가 처리하고, FEE는 Fls 드라이버를 통해 실제 플래시 메모리에 접근한다.
Fee Data Page Format
@ EA_readNvmData, EA_writeNvmData에서 왜 8byte 단위인 이유?
SPI(Serial Peripheral Interface)
; 마이크로컨트롤러(MCU)와 주변 장치 간 데이터를 주고받기 위한 동기식 직렬 통신 프로토콜
특징
- Full Duplex 통신
- 데이터를 송신(MOSI)과 수신(MISO)을 동시에 처리할 수 있는 '전이중(Full Duplex)' 통신 방식 지원
- 데이터 전송 속도를 높이고 효율적인 데이터 교환이 가능
- 1:N 통신 구조
- 하나의 마스터(master)가 여러 슬레이브(slave) 장치와 통신할 수 있다.
- 슬레이브 선택은 CS(Chip Select) 신호를 통해 이루어지며, 슬레이브가 많아질수록 CS 핀이 추가된다.
- 동기식 통신
- 클럭 신호(SCK)를 기준으로 데이터를 전송하며, 동기화된 방식으로 작동
- 클럭 극성(CPOL)과 위상(CPHA)를 설정하여 데이터 전송 타이밍을 조정할 수 있다.
- 빠른 데이터 전송 속도
- 하드웨어 구성; 4가지 신호 라인(핀)
a. SCK(Serial Clock): 마스터가 생성하는 클럭신호로, 데이터 전송을 동기화
b. MOSI(Master Out Slave In) = SDI: 마스터 -> 슬레이브로 데이터를 보내는 신호 라인
c. MISO(Master In Slave Out) = SDO: 슬레이브 -> 마스터로 데이터를 보내는 신호 라인
d. CS(Chip Select): 특정 슬레이브를 선택하기 위한 신호로, 활성화 시 해당 슬레이브와 통신이 가능
칩 여러개와 통신을 할 경우, a,b,c의 핀은 공유. 동기화된 clock을 모든 핀이 받아들일 수 있도록 해야함
p.76 fig2 SPI slave timing diagram -> CS가 low일 때 통신이 시작됨을 알 수 있다.
clock이 어떤 상태일 때 통신하는가?
high, low, rising edge, falling edge의 네 가지 경우.
6축 센서는 (SpiDataShiftEdge) trailing = falling edge일 때 데이터를 보낸다.
@
command- address value인데 구조체에선 address-command-value 순인 건 왜그럴까?
TC234LP는 little endian 방식이기 때문.
센서는 big endian 방식으로 전송받아야 해서, 비트 필드 구조체 안에 선언할 때, 순서를 맞추어 선언.
@
BDU
2바이트를 읽는 동안 값이 섞이지 않게 하기 위해, 81p BDU = 1; MSB/ LSB가 read되기 전까지,register에 update하지 않는다
ODR; 데이터 생성 주기 설정
temperature;
온도가 지나치게 높아지는 걸 방지하려면? 상황에 따라 전류를 제한하거나 끈다