본문 바로가기
임베디드 개발/펌웨어

SPI interface ARINC 429 Transceiver IC, HI-35850 데이터시트 분석

by eteo 2023. 11. 10.

 

HI-35850 datasheet 분석

 

TMS320F28388D DSP 사용 기준으로 작성되었다.

 

Features

 

  • ARINC specification 429 compliant
  • 3.3V or 5.0V logic supply operation
  • Drop-in replacement for Holt’s HI-3585 with improved SPI host interface (12 MHZ)
  • Read multiple receive FIFO messages with a single SPI Opcode (New)
  • On-chip analog line driver and receiver connect directly to ARINC 429 bus
  • Programmable label recognition for 256 labels
  • 32 x 32 Receive FIFO and 32 x 32 Transmit FIFO
  • Independent data rates for Transmit and Receive
  • High-speed, four-wire, 12 MHz SPI
  • Label bit-order control
  • 32nd transmit bit can be data or parity
  • Self test mode
  • Low power
  • Industrial & extended temperature ranges


SPI interface ARINC 429 transciever이며 single transmitter, single receiver를 지원한다. On-chip 라인드라이버가 달려있고 각 32bit x 32개의 Receive FIFO, Trasmit FIFO를 가지고 있다. 

 

지원하는 최대 SPI clock rate는 12MHz이다. lower frequency limit은 없지만 대부분 합리적인 성능을 내기위해 1MHz 이상으로 사용한다.

 

TMS320F2838x 칩을 사용하는 경우 낼 수 있는 SPI clock speed가 최대 12.5MHz인데(High speed mode enable하고 LSPCLK=SYSCLK/1로 설정하면 50MHz까지) IC에서 12MHz까지만 지원하니 그 이하로 설정해야한다. 나는 10MHz로 사용했다.

 

 

참고로 HI-35860 모델은 출력단에 빌트인 라인드라이버가 없고, 디지털 신호로 429 출력을 한다는 차이가 있다. 때문에 ARINC 429 버스에 연결하기 전에 Hi-8592, Hi-8596 같은 라인 드라이버 부품이 따로 필요하다.

 

라인 드라이버란? 통신 장치에 사용되는 칩으로 transmission line과 통신장비의 논리회로 사이에서 신호를 변환하여 전압레벨을 맞추고 신호를 증폭하는 역할을 한다.

 

 

 

 

 

 

 

Block Diagram

 

 

Pin Descriptions

 

 

  • MCU와 SPI 통신을 하기 위한 SCK, /CS, SI, SO 4개의 선이 있다.
  • ARINC429 출력는 AOUT27, BOUT27이 있고 AOUT37, BOUT37이 있다. 차동신호니까 A로 시작하는게 Positive output, B로 시작하는게 Negative output이고, 끝에 -27이 붙은건 10 Ohm resistor가 안붙어 있다는 차이가 있다. 27을 쓰든 37을 쓰든 둘 중 하나 선택해서 쓰면 된다.
  • ARINC429 입력은 RINA, RINB, RINA-40, RINB-40이 있다. 역시 A붙은게 Positive input, B붙은게 Negative input이고 끝에 -40붙은건 40K ohm resistor가 안붙어 있다는 차이가 있다. 쇼트가 날 수 있으니 저항 옵션 중 하나만 선택해 써야 한다.
  • RFLAG, TFLAG는 FIFO 상태를 알 수 있는 출력핀인데 상태 레지스터 읽으면 되니까 굳이 쓸필요가 없을 것 같다.
  • V+, V- 핀은 라인 드라이버에 공급해줘야하는 +5V, -5V 입력핀인데 내가 Holts사에서 받은 개발보드에는 DC-DC converter regulator(LT3463A)가 있어서 3.3v를 공급하면 +/-5V를 만들어내가 HI-35850에 입력해준다.
  • ACLK는 ARINC 429 receiver, transmitter를 위한 타이밍 소스인데 1MHz 클럭을 공급해주면 된다.
  • MR핀은 풀다운 해둔다. 커맨드로도 Master Reset하는 명령이 있어서 핀은 안쓸거다.

 

 

 

 

 

SPI operation

 

SPI mode 0 (CPOL = 0, CPHA = 0)를 사용한다. SPI는 4선식이면 전이중 통신이 가능하지만 여기선 half-duplex 방식을 사용한다. SO는 실제 HI-35850이 시리얼 데이터를 전송할 때 빼고는 High impedance 상태이다. /CS핀은 transfer 전에 low로 떨어뜨리고 transfer가 끝나면 다시 올라온다. 일반적인 SPI interface 제어 방식이다.

 

 

 

 

 

 

 

 

 

Instruction table

 

각 Instruction에 대한 OP CODE와 뒤에 몇 byte가 따라오는지 정의되어있다. Read 명령이면 OP CODE 전송이후 해당 byte만큼 읽고 Write 명령이면 OP CODE 전송이후 해당 byte만큼 쓰면 된다.

 

그리고 Label 필터링과 관련된 OP CODE는 02, 03, 04, 05, 06에 해당한다.

ADC(Air Data Computer)로 부터 데이터 수신하는 경우라면 ADC는 여러 Word를 한번에 보낼텐데 RxFIFO는 32개 뿐이니 내가 원하는 Word만 필터링해서 FIFO에 Load하기 위해서는 해당 기능을 써야할 필요가 있다.

 

ARINC 429에서 Label은 8비트로 표현되므로 0x00부터 0xFF까지 범위의 256가지 Label이 사용될 수 있다. 때문에 IC 내부에 256 bits의 Label Look-up table이 존재하고 해당 bit를 set하면 매칭되는 Label 수신시 FIFO로 로드하고 해당 bit를  reset하면 매칭되는 Label 수신시 무시하고 버린다.

 

수신하는 Word의 종류가 엄청 많다면 06 커맨드를 쓰는게 좋을것 같고 그게 아니라면 02 커맨드로 모두 Reset하고 05 커맨드로 수신할 Label만 set하면 될 것 같다.

 

 

 

 

 

Status Register

 

 

Status Register의 초기상태는 RxFIFO, TxFIFO가 empty일 테니 0x09가 읽히면 맞다.

 

 

 

 

Control Register

 

 

Control Register는 초기값을 써줘야하는데 데모 예제에는 0x2020을 쓰고있다.

 

Self Test를 사용안하려면 CR5을 set해야 하고, Transmission Enable Mode도 Transmit FIFO에 데이터가 있으면 바로 전송되는게 좋으니까 CR13을 set해야 한다.

 

만약 TX채널을 사용한다면 32nd bit는 Parity로 써야 하니까 CR3을 set해줘야하고, RX채널에서 Label Recognition을 사용하고 Parity Check를 Enable하려면 CR2, CR4도 set해야 한다.

 

 

그리고 ARINC 429 BIT Timing은 High Speed(100Kbps)와 Low Speed(12.5Kbps)가 있는데 CR0과 CR10을 clear하면 CLK/10이라서 data rate는 100Kbps를 사용하고, 둘을 set하면 CLK/80이라서 12.5Kbps로 동작한다.

(Holt사에서 제공하는 평가 보드처럼 ACLK에 1MHz 공급하고 ACLK DIV를 1로해 그대로 쓰는경우에 해당한다.)

 

참고.

 

 

 

 

 

 

 

그럼 SPI 인터페이스를 통해 RxFIFO에 들어있는 32-bit ARINC word를 읽으면 어떻게 읽힐까 또는 TxFIFO로 데이터를 전송할 때 어떻게 담아 전송해야할까? 

 

SPI Order와 ARINC bit는 다음과 같다. CR11 = 0으로 하는게 편하다.