[안드로이드] 시리얼 통신 이론 및 사용법 튜토리얼

Android시스템이 탄생한 지 10여년 동안 Android개발 엔지니어의 지위는 번영에서 쇠퇴로 바뀌었고, 현재 순수한 UI Android 앱을 개발하기 위해 막대한 돈을 투자할 의향이 있는 회사는 거의 없습니다. Android 앱은 게임과 사물인터넷(Internet of Things, 줄여서 IoT) 및 기타 방향입니다. 사물 인터넷 세상에서 직렬 통신은 일반적인 유선 통신 방식인데, 이 글에서는 Android직렬 통신을 다시 이해하기 위해 직렬 통신에 초점을 맞췄다.

직렬 통신 소개

직렬 통신( )은 직렬 포트가 Serial Communications비트 단위( ) bit로 바이트를 주고받는 통신 방식이다 .

직렬 포트는 디스플레이 제어 장치와 신호 처리 보드 간의 통신을 위한 주요 인터페이스이며, 디스플레이 제어 장치와 다른 장치 간, 장치 간 프로토콜 데이터 프레임의 통신 및 전송을 위한 중요한 인터페이스이기도 합니다.

직렬통신 분류

串行通信통신 방식에 따라 직렬 통신은 과 로 구분됩니다 并行通信.

직렬 통신

직렬 통신: 양측이 비트 단위로 통신하고 타이밍을 준수하는 통신 방법입니다.
여기에 이미지 설명을 삽입하세요.

직렬 통신은 数据同步方式, 数据传输方式, 에 따라 电气标准及协议여러 범주로 나눌 수 있습니다.

데이터 동기화 방식에 따라 구분

  • 동기 통신
    동기 통신: 하나의 통신은 일반적으로 여러 데이터 문자를 포함하는 하나의 정보 프레임만 전송합니다. 데이터 형식은 각각 문자 중심 및 문자 중심입니다 bit.
  • 비동기 통신
    비동기 통신: 각 문자는 시작 비트와 정지 비트를 문자의 시작과 끝 표시로 사용하며, 문자 단위로 하나씩 송수신됩니다. 데이터를 비동기식으로 전송할 때 두 통신 당사자는 문자 형식과 통신 속도에 동의해야 합니다.

데이터 전송 방식에 따라

  • Simplex
    Simplex: 통신하는 두 당사자 중 한 쪽은 발신자로 고정되고 다른 쪽은 수신자로 고정됩니다. 정보는 단일 전송선을 사용하여 한 방향으로만 전송될 수 있습니다.
    여기에 이미지 설명을 삽입하세요.
  • 반이중
    반이중: 통신 프로세스 중 언제든지 정보는 A에서 B로, B에서 A로 전송될 수 있지만 한 방향으로만 전송될 수 있습니다.
    여기에 이미지 설명을 삽입하세요.
  • 전이중(Full
    -duplex) 전이중(Full-duplex): 데이터를 양방향으로 동시에 전송할 수 있는 통신으로, 두 가지 단방향 통신 방식을 결합한 성능과 동일합니다. 전이중이란 신호가 양방향(A→B 및 B→A)으로 동시에(순간적으로) 전송될 수 있음을 의미합니다. A→B와 B→A를 동시에 의미하며, 이는 순간동기화를 의미합니다.
    여기에 이미지 설명을 삽입하세요.

전기 표준 및 프로토콜에 따라 분류됨

EIA-RS-232C직렬 포트는 , EIA-422, EIA-485등을 포함하여 전기 표준 및 프로토콜에 따라 구분됩니다.

  • EIA-RS-232C
    RS-232C 표준(프로토콜)의 전체 명칭은 표준이며 , 정의는 " EIA-RS-232C데이터 단말 장비( DTE)와 데이터 통신 장비( ) DCE간의 직렬 바이너리 데이터 교환 인터페이스에 대한 기술 표준 "이다. 1970년 전자산업협회( )와 벨 시스템, 모뎀 제조사, 컴퓨터 단말기 제조사가 EIA공동으로 개발한 전이중 직렬 통신 표준 이다. 예를 들어, PC머신의 COM1인터페이스 는 인터페이스 COM2입니다 .RS-232C

자세한 내용 보기: EIA-RS-232C

  • EIA-422
    EIA-422 (EIA -422라고도 함 RS-422)는 4선, 전이중, 차동 전송 및 다중 지점 통신을 지정하는 일련의 데이터 전송 프로토콜입니다. 활성화 끝이 있거나 없는 단방향/비가역 전송선을 사용하여 균형 잡힌 전송을 사용합니다. 차이점은 여러 발신자는 허용되지 않고 여러 수신자만 허용된다는 EIA-485것입니다 . EIA-422하드웨어 구성 측면에서 EIA-422( )는 ( ) RS-422의 두 집합과 동일합니다 . 즉, 두 개의 반이중 ( )이 전이중 ( )을 구성합니다.EIA-485RS-485EIA-485RS-485RS-422EIA-422

자세한 내용 보기: EIA-422

  • EIA-485 (이전에는 OR
    EIA-485로 알려짐 )는 2선, 반이중, 균형 전송선 다지점 통신을 위한 OSI 모델의 물리 계층의 전기적 특성을 지정하는 표준입니다. 전기통신산업협회( )와 전자공업연합회( ) 가 공동으로 제정한 규격 입니다. 이 표준을 구현한 디지털 통신 네트워크는 전자 잡음이 있는 환경에서도 장거리에서 효율적으로 통신할 수 있습니다. 선형 다지점 버스 구성에서는 네트워크에 여러 수신기가 있을 수 있습니다. 따라서 산업 환경에서 사용하기에 적합합니다.RS-485RS485TIAEIA

자세한 내용 보기: EIA-485

병렬 통신

byte병렬 통신: 바이트( ) 또는 바이트( byte)의 배수를 전송 단위로 사용하여 동시에 병렬선을 통해 전송하는 것을 말하며, 이렇게 하면 데이터 전송 속도가 크게 향상되지만 병렬 전송선의 길이가 길어집니다 . 길이가 길어지면 간섭이 발생하고 데이터에 오류가 발생하기 쉬우므로 장거리 데이터 전송에는 병렬 통신이 적합하지 않습니다. 예: 프린터 포트, IDE 포트 등
여기에 이미지 설명을 삽입하세요.

직렬 통신을 요약한 차트

여기에 이미지 설명을 삽입하세요.

직렬 통신 사용

개발자 로서 Android직렬 포트에 관련된 많은 것을 이해할 필요는 없고 기본적으로 직렬 포트에 연결하는 방법에만 집중하면 됩니다. 아마도 하드웨어 개발 엔지니어만이 직렬 포트 통신의 원리와 기타 사항을 이해하면 될 것입니다. 관련 지식.

사용하기 전에 AndroidSerialPortGithub clone 프로젝트 로 로컬로 이동하여 모듈을 프로젝트에 복사하세요 .lib_serialport

그런 다음 직렬 포트 연결에 필요한 매개변수를 구성합니다.

  • 직렬 포트: 직렬 통신 프로토콜에 사용되는 인터페이스입니다.
  • 전송 속도( Baud rate): 단위 시간당 전송되는 기호 수. 예를 들어, 전송 속도 9600은 초당 9600바이트, 즉 밀리초당 9.6바이트를 전송한다는 의미입니다.
  • 데이터 비트: 전송되는 메시지의 길이에 따라 컴퓨터가 보내는 정보 패킷입니다.
  • 체크 비트(Check bit): 패리티 비트라고도 하며, 코드 전송의 정확성을 확인하는 검증 방법입니다.
  • 정지 비트: 클럭 동기화를 수정할 수 있는 기회를 제공하며 전송 종료를 나타내는 데 사용됩니다.
  • 흐름 제어: 데이터 전송 프로세스를 제어하여 송신측과 수신측 간의 속도 일치를 달성하고 데이터 손실을 방지합니다. 일반적으로 사용되는 흐름 제어에는 하드웨어 흐름 제어와 소프트웨어 흐름 제어가 있습니다. 일반적으로 사용되는 하드웨어 흐름 제어에는 RTS/CTS흐름 제어(데이터 터미널 준비/데이터 설정 준비) 흐름 제어가 포함되며 일반적으로 사용되는 소프트웨어 흐름 제어에는 XON/XOFF.
var mSerialPortHelper = SerialPortHelper()
// 配置串口号
mSerialPortHelper.port = ConfigManage.serialPort
// 配置波特率
mSerialPortHelper.baudRate = ConfigManage.baudRate.toInt()
// 配置数据位
mSerialPortHelper.dataBits = ConfigManage.dataBits.toInt()
// 配置校验位
mSerialPortHelper.parity = SerialPortDataManage.parity[ConfigManage.parity]!!.toInt()
// 配置停止位
mSerialPortHelper.stopBits = ConfigManage.stopBits.toInt()
// 配置流控
mSerialPortHelper.flowCon = SerialPortDataManage.flow_bits[ConfigManage.flowBits]!!.toInt()
// 监听串口数据的传输
mSerialPortHelper.setISerialPortDataListener(object : ISerialPortDataListener {
    
    
	override fun onDataReceived(bytes: ByteArray?) {
    
    
		byteToHex(1, bytes)
	}

	override fun onDataSend(bytes: ByteArray?) {
    
    
		byteToHex(0, bytes)
	}
})
// 打开串口
mSerialPortHelper.open()

최종 효과:

참고문헌
1. [직렬통신] 연구노트
2. 통신방식의 분류(직렬통신과 병렬통신)

추천

출처blog.csdn.net/baidu_41616022/article/details/130478138