본문 바로가기
Power Electronics

디지탈 전력변환-제4장 통신 주변장치 — SPI, I2C, CAN, UART

by linuxgo 2026. 6. 29.

4.1 서론 — 전력 변환기에서 통신이 필요한 이유

전력 변환기는 그 자체로 완결된 시스템이 아니다. 인버터는 상위 모터 드라이브 컨트롤러로부터 속도 지령을 받아야 하고, DC-DC 변환기는 배터리 관리 시스템(BMS)과 상태 정보를 교환해야 하며, 게이트 드라이버 IC는 SPI를 통해 보호 레지스터를 설정받아야 한다. 또한 진단 장비와 연결해 실시간으로 파형을 관찰하거나, 펌웨어 업데이트를 수신하는 것도 통신 없이는 불가능하다.

F28P65x가 제공하는 통신 인터페이스는 용도와 특성에 따라 명확히 구분된다.

인터페이스 최대속도 배선수 주요 용도
SPI LSPCLK/4 4(3-wire는 3) 게이트 드라이버 설정, 외부 DAC/ADC 확장
I2C 400kHz(고속), 1MHz(고속+) 2 배터리 계량 IC, 온도 센서, EEPROM
DCAN 1 Mbit/s 2(차동) 차량/산업 제어망
MCAN 5 Mbit/s(CAN FD) 2(차동) 고속 CAN FD 네트워크
UART 25 Mbps(고속 모드) 2 디버그 콘솔, MODBUS, PC 통신

4.2 SPI — 직렬 주변장치 인터페이스

4.2.1 핀 명칭과 역할

F28P65x SPI는 최신 C2000 명명 규칙을 사용하며 핀 이름이 기존 세대와 다르다.

방향(컨트롤러 관점) 설명
SPIPICO 출력 Peripheral In / Controller Out — 컨트롤러→주변장치 데이터
SPIPOCI 입력 Peripheral Out / Controller In — 주변장치→컨트롤러 데이터
SPICLK 출력(컨트롤러) / 입력(주변장치) 직렬 클록
SPIPTE 출력 Peripheral Transmit Enable — 능동 LOW, 칩 선택

4.2.2 클록 방식 4종 (CLKPOLARITY × CLK_PHASE)

모드 CLKPOLARITY CLK_PHASE Driverlib 상수
0 0 (Active-High) 0 (No delay) SPI_PROT_POL0PHA0
1 0 (Active-High) 1 (Phase delay) SPI_PROT_POL0PHA1
2 1 (Active-Low) 0 (No delay) SPI_PROT_POL1PHA0
3 1 (Active-Low) 1 (Phase delay) SPI_PROT_POL1PHA1

4.2.3 보드레이트 공식

$$ \text{SPIBRR} \geq 3: \quad f_{SPI} = \frac{f_{LSPCLK}}{SPIBRR+1} $$

$$ \text{SPIBRR} = 0, 1, 2: \quad f_{SPI} = \frac{f_{LSPCLK}}{4} $$

주변장치(Peripheral) 모드에서 SPICLK 입력 주파수는 LSPCLK/4 이하를 유지해야 한다.

4.2.4 FIFO 동작

리셋 시 SPI는 표준 모드로 부팅되며 FIFO 기능이 비활성화된다. FIFO 활성화 절차는 다음과 같다.

1. SPIFFTX.SPIFFENA = 1 — FIFO 모드 활성화
2. TXFFINTCLR / RXFFINTCLR / RXFFOVFCLR 플래그 클리어
3. 송신 FIFO 리셋 해제(TXFIFO), 수신 FIFO 리셋 해제(RXFIFO)
4. 원하는 FIFO 트리거 레벨 설정
5. FIFO 인터럽트 활성화 (TX → SPITXINT, RX → SPIRXINT)

FIFO 모드에서 인터럽트가 SPITXINT(송신 FIFO)와 SPIRXINT(수신 FIFO, 오버런 포함) 두 개로 분리된다. 각각 16레벨 깊이의 독립 FIFO를 가진다.

4.2.5 고속 모드(HS_MODE)와 3-Wire 모드

고속 모드: HS_MODE 활성화 시 full-duplex 통신 속도가 LSPCLK/4까지 도달 가능하다. 단일 컨트롤러 ↔ 단일 주변장치 구성만 지원하며, LSPCLK=SYSCLK(LOSPCP.LSPCLKDIV=0), SPIBRR=3 조건이 필요하다.

3-Wire 모드: TRIWIRE 비트 세트 시 SPIPICO가 양방향 핀으로 전환되고 SPIPOCI는 미사용된다. 수신 전에 TALK 비트를 클리어하고 SPIDAT을 더미 읽기로 클리어해야 한다.

4.2.6 Driverlib 코드 — 게이트 드라이버 레지스터 설정

/*==============================================================================
 * 파일   : spi_init.c
 * 목적   : SPIA 컨트롤러 모드 — 게이트 드라이버 IC SPI 설정
 *          전송 방식: SPI Mode 1 (POL=0, PHA=1), 16-bit 프레임, FIFO
 *============================================================================*/

#include "driverlib.h"
#include "device.h"

#define SPI_BITRATE     1000000U    /* 1 MHz */

void SPIA_GateDriverInit(void)
{
    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SPIA);

    /* GPIO 핀 설정 (pin_map.h 직접 확인) */
    GPIO_setPinConfig(GPIO_58_SPIA_PICO);   /* SPIPICO — Controller Out */
    GPIO_setPinConfig(GPIO_59_SPIA_POCI);   /* SPIPOCI — Controller In  */
    GPIO_setPinConfig(GPIO_60_SPIA_CLK);    /* SPICLK                   */
    GPIO_setPinConfig(GPIO_61_SPIA_PTE);    /* SPIPTE — 칩 선택(Active LOW) */

    /* SPI 설정
     * protocol: POL0PHA1 (SPI Mode 1)
     * mode: 컨트롤러
     * bitRate: 1MHz
     * dataWidth: 16-bit                                                  */
    SPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ,
                  SPI_PROT_POL0PHA1,
                  SPI_MODE_CONTROLLER,
                  SPI_BITRATE,
                  16U);

    SPI_enableFIFO(SPIA_BASE);
    SPI_resetTxFIFO(SPIA_BASE);
    SPI_resetRxFIFO(SPIA_BASE);

    /* TX FIFO 1개 이하일 때 인터럽트, RX FIFO 1개 수신 시 인터럽트 */
    SPI_setFIFOInterruptLevel(SPIA_BASE, SPI_FIFO_TX1, SPI_FIFO_RX1);

    SPI_enableModule(SPIA_BASE);
}

/* 16-bit 레지스터 1개 쓰기 (blocking) */
void SPIA_WriteReg(uint16_t addr, uint16_t data)
{
    uint16_t txWord = ((addr & 0x7FU) << 8U) | (data & 0xFFU);
    SPI_writeDataBlockingFIFO(SPIA_BASE, txWord);
    /* 전이중 SPI는 송신 시 수신 FIFO도 채워지므로 더미 읽기 필요 */
    (void)SPI_readDataBlockingFIFO(SPIA_BASE);
}

 

4.3 I2C — 인터-인티그레이티드 서킷

4.3.1 I2C 모듈 구성

F28P65x는 I2C 모듈 2개(I2CA_BASE=0x7300, I2CB_BASE=0x7340)를 보유하며, NXP I2C 버스 규격 v2.1과 호환된다. 표준 모드(100kHz), 고속 모드(400kHz), 고속+ 모드(1MHz)를 지원한다.

4.3.2 클록 생성 공식

1단계 — 모듈 클록(I2CPSC):

$$f_{I2C_mod} = \frac{f_{SYSCLK}}{I2CPSC + 1}$$

설계 제약: I2C 모듈 클록은 반드시 7~12 MHz 범위 내에 있어야 한다. SYSCLK=200MHz이면 I2CPSC=16~27 범위가 적합하다.

2단계 — SCL 클록(I2CCLKL, I2CCLKH):

$$f_{SCL} = \frac{f_{I2C_mod}}{(ICCH + d) + (ICCL + d)}$$

보정계수 d는 I2CPSC 값에 따라 달라진다.

I2CPSC  d
0 7
1 6
2 이상 5

설계 예 — SYSCLK=200MHz, f_SCL=400kHz, 50% 듀티:

$I2CPSC=19$ → $f_{mod}=200/20=10\text{MHz}$, $T_{mod}=100\text{ns}$

$ICCH + ICCL = \dfrac{T_{SCL}}{T_{mod}} - 2d = \dfrac{2500}{100} - 10 = 15$

50% 듀티: $ICCH = ICCL = 7$

4.3.3 리셋 규칙 — IRS 비트

I2C 모듈은 IRS=0 상태에서만 설정을 변경할 수 있다. 설정 완료 후 IRS=1로 세트해야 모듈이 실제로 동작한다. I2CPSC 레지스터 변경도 반드시 IRS=0 상태에서 수행해야 한다.

4.3.4 인터럽트 소스 7종

Driverlib 상수 설명
I2C_INT_ARB_LOST 멀티컨트롤러 버스 중재 손실
I2C_INT_NO_ACK 대상 장치가 ACK를 보내지 않음(NACK)
I2C_INT_REG_ACCESS_RDY 이전 동작 완료, 다음 명령 가능
I2C_INT_RX_DATA_RDY I2CDRR에 읽을 데이터 있음
I2C_INT_TX_DATA_RDY I2CDXR에 데이터 쓸 수 있음
I2C_INT_STOP_CONDITION STOP 조건 감지됨
I2C_INT_ADDR_TARGET 대상 모드에서 자신의 주소 수신

4.3.5 Driverlib 코드 — 배터리 계량 IC 통신

/*==============================================================================
 * 파일   : i2c_init.c
 * 목적   : I2CA 컨트롤러 모드 — 배터리 계량 IC(예: BQ34Z100) 400kHz 통신
 *============================================================================*/

#include "driverlib.h"
#include "device.h"

#define I2C_SCL_FREQ_HZ     400000U
#define BQ34Z100_ADDR       0x55U     /* 7-bit 슬레이브 주소 */

void I2CA_BatteryGaugeInit(void)
{
    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_I2CA);

    /* GPIO_91(SDA), GPIO_92(SCL) — pin_map.h 직접 확인 */
    GPIO_setPinConfig(GPIO_91_I2CA_SDA);
    GPIO_setPinConfig(GPIO_92_I2CA_SCL);
    GPIO_setQualificationMode(91U, GPIO_QUAL_ASYNC);
    GPIO_setQualificationMode(92U, GPIO_QUAL_ASYNC);

    /* 반드시 IRS=0 상태에서 설정 */
    I2C_disableModule(I2CA_BASE);

    /* I2C_initController(): I2CPSC/I2CCLKL/I2CCLKH 자동 계산
     * SYSCLK=200MHz, SCL=400kHz, 50% 듀티                              */
    I2C_initController(I2CA_BASE,
                       DEVICE_SYSCLK_FREQ,
                       I2C_SCL_FREQ_HZ,
                       I2C_DUTYCYCLE_50);

    I2C_setAddressMode(I2CA_BASE, I2C_ADDR_MODE_7BITS);
    I2C_setOwnAddress(I2CA_BASE, 0x00U);

    /* 인터럽트 활성화 — I2C_INT_NO_ACK (I2C_INT_NACK 아님) */
    I2C_enableInterrupt(I2CA_BASE,
                        I2C_INT_NO_ACK        |
                        I2C_INT_ARB_LOST      |
                        I2C_INT_REG_ACCESS_RDY);

    I2C_enableModule(I2CA_BASE);    /* IRS = 1 */
}

/* 단일 바이트 레지스터 읽기 */
uint8_t I2CA_ReadByte(uint8_t regAddr)
{
    /* 버스 사용 중이면 대기 */
    while(I2C_getStatus(I2CA_BASE) & I2C_STS_BUS_BUSY);

    /* 레지스터 주소 송신 — 컨트롤러 송신 모드, 1바이트 */
    I2C_setTargetAddress(I2CA_BASE, BQ34Z100_ADDR);
    I2C_setDataCount(I2CA_BASE, 1U);
    I2C_setConfig(I2CA_BASE, I2C_CONTROLLER_SEND_MODE);
    I2C_sendStartCondition(I2CA_BASE);
    I2C_putData(I2CA_BASE, regAddr);

    /* 레지스터 준비 대기(ARDY) */
    while(!(I2C_getStatus(I2CA_BASE) & I2C_STS_REG_ACCESS_RDY));

    /* 수신 모드 전환 — 1바이트 수신 후 STOP */
    I2C_setDataCount(I2CA_BASE, 1U);
    I2C_setConfig(I2CA_BASE, I2C_CONTROLLER_RECEIVE_MODE);
    I2C_sendStartCondition(I2CA_BASE);
    I2C_sendStopCondition(I2CA_BASE);

    /* 수신 데이터 준비 대기(RRDY) */
    while(!(I2C_getStatus(I2CA_BASE) & I2C_STS_RX_DATA_RDY));

    return (uint8_t)I2C_getData(I2CA_BASE);
}

 

4.4 DCAN — 컨트롤러 영역 네트워크

4.4.1 DCAN 개요

DCAN은 ISO11898-1(CAN 2.0B) 호환 모듈로 최대 1 Mbit/s를 지원한다. F28P65x에는 DCAN 모듈 1개(CANA_BASE=0x00048000)가 존재한다. 멀티마스터, 비파괴적 비트 단위 중재, 오류 감지/격리 기능을 하드웨어로 제공한다.

4.4.2 비트 타이밍 구조

[Sync_Seg(1 tq)] + [Prop_Seg] + [Phase_Seg1] + [Phase_Seg2]
                                              ^
                                         Sample Point

 

파라미터 범위
Sync_Seg 1 tq (고정)
Prop_Seg 1~8 tq
Phase_Seg1 1~8 tq
Phase_Seg2 1~8 tq
SJW 1~4 tq (min(4, Phase_Seg1) 이하)

비트 타임 공식:

$$t_q = \frac{BRP}{f_{CAN_CLK}}, \qquad T_{bit} = (TSEG1 + TSEG2 + 3) \times t_q$$

레지스터에는 실제값보다 1 작은 값을 기록한다(예: SJW=1이면 레지스터에 0을 씀).

설계 예 — CAN_CLK=10MHz, 1Mbit/s:

$t_q=100\text{ns}$, $T_{bit}=1\mu\text{s}=10\times t_q$, BRP=0(×1): TSEG1=7(Prop+Phase_Seg1=8−1), TSEG2=0(Phase_Seg2=1−1) → BTR=0x00000700

4.4.3 메시지 오브젝트 — 32개 하드웨어 버퍼

DCAN은 32개의 메시지 오브젝트를 가지며, 각각 독립적으로 송신/수신으로 설정할 수 있다. 메시지 ID 필터링, 인터럽트 트리거, DMA 연계 모두 메시지 오브젝트 단위로 설정한다.

4.4.4 Driverlib 코드 — 산업 제어 네트워크 500kbps

/*==============================================================================
 * 파일   : can_init.c
 * 목적   : DCAN(CANA) 500kbps — 산업 제어망 연결
 *          TX 메시지 오브젝트 1: ID 0x100 (제어 지령 송신)
 *          RX 메시지 오브젝트 2: ID 0x200 (상태 피드백 수신)
 *============================================================================*/

#include "driverlib.h"
#include "device.h"

#define CAN_BITRATE          500000U
#define CAN_TX_MSG_OBJ_ID    1U      /* 메시지 오브젝트 번호 (1~32) */
#define CAN_RX_MSG_OBJ_ID    2U
#define CAN_TX_MSG_ID        0x100U
#define CAN_RX_MSG_ID        0x200U

void CANA_IndustrialNetInit(void)
{
    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CANA);

    /* GPIO_4(TX), GPIO_5(RX) — pin_map.h 직접 확인 */
    GPIO_setPinConfig(GPIO_4_CANA_TX);
    GPIO_setPinConfig(GPIO_5_CANA_RX);

    CAN_initModule(CANA_BASE);

    /* CAN_setBitRate(): 내부에서 비트타이밍 레지스터 자동 계산 */
    CAN_setBitRate(CANA_BASE, DEVICE_SYSCLK_FREQ, CAN_BITRATE, 16U);

    /* TX 메시지 오브젝트 설정 */
    CAN_setupMessageObject(CANA_BASE,
                           CAN_TX_MSG_OBJ_ID,
                           CAN_TX_MSG_ID,
                           CAN_MSG_FRAME_STD,
                           CAN_MSG_OBJ_TYPE_TX,
                           0U,
                           CAN_MSG_OBJ_TX_INT_ENABLE,
                           8U);

    /* RX 메시지 오브젝트 설정 */
    CAN_setupMessageObject(CANA_BASE,
                           CAN_RX_MSG_OBJ_ID,
                           CAN_RX_MSG_ID,
                           CAN_MSG_FRAME_STD,
                           CAN_MSG_OBJ_TYPE_RX,
                           0U,
                           CAN_MSG_OBJ_RX_INT_ENABLE,
                           8U);

    CAN_enableInterrupt(CANA_BASE,
                        CAN_INT_IE0    |
                        CAN_INT_ERROR  |
                        CAN_INT_STATUS);

    CAN_enableController(CANA_BASE);
    CAN_startModule(CANA_BASE);
}

void CANA_SendFrame(uint8_t *pData, uint16_t len)
{
    CAN_sendMessage(CANA_BASE, CAN_TX_MSG_OBJ_ID, len, pData);
}

void CANA_ReadFrame(uint8_t *pRxBuf)
{
    CAN_readMessage(CANA_BASE, CAN_RX_MSG_OBJ_ID, pRxBuf);
}

 

4.5 MCAN — 모듈러 컨트롤러 영역 네트워크 (CAN FD)

4.5.1 DCAN과의 차이점

MCAN은 Bosch M_CAN IP 코어를 기반으로 CAN FD(Flexible Data-rate) 프로토콜을 지원한다.

항목 DCAN MCAN
표준 CAN 2.0B (ISO11898-1) CAN FD (ISO11898-1:2015)
최대 페이로드 8 바이트 64 바이트
비트레이트 최대 1 Mbit/s 아비트레이션 1 Mbit/s + 데이터 5 Mbit/s
메시지 버퍼 32개 고정 메시지 RAM에 유연하게 배치
비트 타이밍 단일 설정 아비트레이션/데이터 페이즈 각각 설정

F28P65x에는 MCAN 모듈 2개(MCANA_BASE=0x5A600, MCANB_BASE=0x5C600)가 존재한다.

4.5.2 메시지 RAM 구조

MCAN의 가장 큰 특징은 메시지 저장 공간이 고정 레지스터가 아닌 메시지 RAM(공유 SRAM)에 동적으로 배치된다는 점이다. TX 버퍼 수, RX FIFO 깊이, 필터 개수를 자유롭게 조합하여 메시지 RAM을 분할한다. MCAN 초기화는 구조체 기반의 상세 설정이 필요하므로, C2000Ware의 mcan_ex1_loopback_interrupts.c 예제를 기준으로 삼고 SysConfig를 통해 생성된 코드를 활용하는 것이 권장된다.

4.6 UART — 범용 비동기 송수신기

4.6.1 UART 개요

F28P65x의 UART는 기존 C2000 SCI(Serial Communications Interface)를 대체하는 새로운 모듈이다. ARM PrimeCell UART(PL011) 설계를 기반으로 하며, 2개 인스턴스(UARTA_BASE=0x6A000, UARTB_BASE=0x6A800)를 가진다.

주요 특징:

  • 최대 12.5 Mbps(÷16 모드), 25 Mbps(÷8 고속 모드)
  • TX/RX 각각 16개 깊이, 8-bit 폭 FIFO
  • 5~8 데이터 비트, 짝수/홀수/무 패리티, 1~2 정지 비트
  • IrDA SIR, EIA-485 9-bit, DMA 지원

4.6.2 보드레이트 공식 — 정수부 + 분수부

$$BRD = \frac{f_{SYSCLK}}{ClkDiv \times BaudRate}$$

$$UARTIBRD = \lfloor BRD \rfloor, \qquad UARTFBRD = \lfloor (BRD - UARTIBRD) \times 64 + 0.5 \rfloor$$

$ClkDiv$는 HSE=0(기본)이면 16, HSE=1이면 8이다.

설계 예 — SYSCLK=200MHz, 115200 bps:

$$BRD = \frac{200{,}000{,}000}{16 \times 115{,}200} = 108.507$$

$$UARTIBRD = 108, \qquad UARTFBRD = \lfloor 0.507 \times 64 + 0.5 \rfloor = 32$$

4.6.3 초기화 순서

1. UARTCTL.UARTEN = 0 — UART 비활성화
2. UARTIBRD에 정수 BRD 기록
3. UARTFBRD에 소수 BRD 기록
4. UARTLCRH에 직렬 파라미터 기록 (데이터 비트, 패리티, 정지 비트, FIFO ON/OFF)
5. (선택) UARTDMACTL 구성
6. UARTCTL.UARTEN = 1 — UART 활성화

4.6.4 FIFO 트리거 레벨

TX 상수 TX 트리거  RX 상수 RX 트리거
UART_FIFO_TX1_8 1/8 채워짐 (2개) UART_FIFO_RX1_8 1/8 채워짐
UART_FIFO_TX2_8 1/4 채워짐 (4개) UART_FIFO_RX2_8 1/4 채워짐
UART_FIFO_TX4_8 1/2 채워짐 (8개) UART_FIFO_RX4_8 1/2 채워짐
UART_FIFO_TX6_8 3/4 채워짐 (12개) UART_FIFO_RX6_8 3/4 채워짐
UART_FIFO_TX7_8 7/8 채워짐 (14개) UART_FIFO_RX7_8 7/8 채워짐

4.6.5 Driverlib 코드 — 디버그 콘솔

/*==============================================================================
 * 파일   : uart_init.c
 * 목적   : UARTA 115200 bps, 8N1, FIFO 인터럽트 기반 수신
 *============================================================================*/

#include "driverlib.h"
#include "device.h"

#define UART_BAUD_RATE  115200U

void UARTA_DebugConsoleInit(void)
{
    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_UARTA);

    /* GPIO_29(TX), GPIO_28(RX) — pin_map.h 직접 확인 */
    GPIO_setPinConfig(GPIO_29_UARTA_TX);
    GPIO_setPinConfig(GPIO_28_UARTA_RX);
    GPIO_setQualificationMode(28U, GPIO_QUAL_ASYNC);

    /* UART_setConfig(): 내부에서 UARTIBRD/UARTFBRD 자동 계산 */
    UART_setConfig(UARTA_BASE,
                   DEVICE_SYSCLK_FREQ,
                   UART_BAUD_RATE,
                   UART_CONFIG_WLEN_8  |
                   UART_CONFIG_PAR_NONE |
                   UART_CONFIG_STOP_ONE);

    UART_enableFIFO(UARTA_BASE);

    /* RX: 1/4 채워지면 인터럽트, TX: 1/2 비었을 때 인터럽트 */
    UART_setFIFOLevel(UARTA_BASE, UART_FIFO_TX4_8, UART_FIFO_RX2_8);

    UART_enableInterrupt(UARTA_BASE, UART_INT_RX | UART_INT_TX);
    UART_enableModule(UARTA_BASE);
}

void UARTA_SendByte(uint8_t data)
{
    UART_writeChar(UARTA_BASE, data);
}

void UARTA_SendString(const char *str)
{
    while(*str)
    {
        UART_writeChar(UARTA_BASE, (uint8_t)*str++);
    }
}

/* 수신 인터럽트 서비스 루틴 */
__interrupt void uartaRxISR(void)
{
    while(UART_isDataAvailable(UARTA_BASE))
    {
        uint8_t rxByte = (uint8_t)UART_readCharNonBlocking(UARTA_BASE);
        (void)rxByte;   /* 수신 데이터 처리 위치 */
    }
    UART_clearInterruptStatus(UARTA_BASE, UART_INT_RX);
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}

 

4.7 장 요약

본 장에서 다룬 네 가지 통신 주변장치는 각각 전력 변환 시스템에서 서로 다른 역할을 담당한다.

  • SPI는 게이트 드라이버 IC나 외부 DAC/ADC처럼 보드 내부의 고속 단거리 통신에 최적화되어 있다. 4가지 클록 방식과 16레벨 FIFO, 핀 명칭이 PICO/POCI로 바뀐 것이 기존 세대와의 주요 차이점이다.
  • I2C는 2선만으로 다수의 슬레이브 장치를 연결할 수 있어 배터리 계량 IC, 온도 센서, EEPROM에 적합하다. 모듈 클록이 7~12MHz 범위를 유지해야 하며, IRS=0 상태에서만 설정을 변경할 수 있다.
  • DCAN은 ISO11898-1 호환으로 산업 제어망의 표준이다. 비트 타이밍 레지스터값이 실제 기능값보다 1 작으며, 32개의 하드웨어 메시지 오브젝트가 독립 필터링과 인터럽트를 지원한다.
  • MCAN은 CAN FD를 지원하며 데이터 단계에서 최대 5 Mbit/s, 페이로드 최대 64바이트가 가능하다. 메시지 RAM 기반의 유연한 버퍼 구성이 핵심 특징이다.
  • UART는 SCI를 대체하는 새 모듈로, 22-bit 분수 보드레이트 생성기로 표준 보드레이트를 정밀하게 생성한다. 5단계의 FIFO 트리거 레벨로 CPU 부하를 최소화할 수 있다.

참고문헌

  1. Texas Instruments, TMS320F28P65x Real-Time Microcontrollers Technical Reference Manual, SPRUIZ1B, July 2023 – Revised August 2024.
  2. Texas Instruments, Calculator for CAN Bit Timing Parameters, Application Report.
  3. Texas Instruments, Programming Examples and Debug Strategies for the DCAN Module, Application Report.