이 레퍼런스는 SF32LB57 듀얼 모드 Bluetooth 모듈(SIFLI_AT) V1.2.1 버전의 외부 AT 명령 인터페이스를 설명합니다. 명령과 응답 문자열은 고정폭 글꼴로 표기하며, \r은 캐리지 리턴(0x0D)을, \n은 라인 피드(0x0A)를 나타냅니다. AT 명령은 ASCII 텍스트로 전송되고, PDU 프레임의 바이너리 필드는 리틀 엔디언 바이트 순서를 사용합니다.
이 문서는 Bluetooth AT 명령 모듈 페이지에서 참조하는 전체 AT 인터페이스 사양입니다.
표: 개정 이력
버전
변경 사항
날짜
V1.2.1
SF32LB57 V1.2.1: AT+CFGRESET 추가, 부팅 시 Classic Bluetooth 이름 동기화, CLEARLINKKEY, 연결 핸들 및 PDU 문서 갱신, BQB 빌드 구성 활성화.
SF32LB57 듀얼 모드 Bluetooth 모듈은 호스트에 BLE와 Classic Bluetooth(BR/EDR)를 모두 지원하는 UART 기반 AT 명령 인터페이스를 제공합니다. 호스트는 AT 명령으로 디바이스 매개변수를 설정하고, 연결을 관리하고, 데이터를 송수신하며, 모듈이 보내는 비요청 상태 표시를 수신합니다.
AT 명령은 ASCII 텍스트로 전송되며 캐리지 리턴 \r(0x0D)으로 끝납니다. 명령 접두사는 AT+(AT 형식 명령) 또는 AT>(PDU 형식 명령)입니다. SF32LB57에서 AT 포트는 USART1이며, 하드웨어 흐름 제어 없이 8N1 프레이밍을 사용하고 기본 보레이트는 460800 bps입니다. AT 프레임 하나는 512바이트로 제한됩니다.
BR/EDR Classic Bluetooth DUT 활성화 비트를 설정하고 OK로 응답한 다음, 테스트 장비가 LMP_test_control을 통해 무선으로 시그널링 테스트를 트리거하기를 기다립니다. AT UART(USART1)는 계속 사용할 수 있습니다. DUT 모드 진입은 되돌릴 수 없으며, 리셋해야만 빠져나올 수 있습니다.
n: 0 또는 1. 1 = 공개 주소에서 파생된 BLE 정적 랜덤 주소를 활성화합니다(공개 주소 최상위 바이트의 상위 2비트를 1로 설정하며, 예를 들어 공개 주소 001583112233에서 BLE 주소 C01583112233이 파생됩니다). 0 = BLE가 공개 주소로 되돌아갑니다. 다른 값이나 추가 문자는 ERROR를 반환합니다. 기본값 0.
비고
스위치 상태가 구성에 반영됩니다. 1로 설정했는데 공개 주소 읽기에 실패하면 스위치는 0으로 되돌아가고 ERROR를 반환합니다. 주소 변경은 NVDS에 기록되며 리셋 후에 적용됩니다. AT+RANDOMADDR=1을 다시 실행하면 (변하지 않은) 공개 주소에서 같은 랜덤 주소가 다시 파생됩니다.
state: 현재 검색 가능 상태입니다. 0 = 검색 불가, 1 = 검색 가능, 2 = 부분적으로 검색 가능(혼합 상태). 의미는 동작 모드에 따라 달라집니다. BLE 모드(BTMODE=1)에서는 BLE 광고 설정을 반영하여 1 = 켬, 0 = 끔입니다. BT 모드(BTMODE=2)에서는 inquiry scan과 page scan을 반영하여 둘 다 켜져 있으면 1, 둘 다 꺼져 있으면 0, 그 외에는 2입니다. 듀얼 모드(BTMODE=0)에서는 BLE 광고, inquiry scan, page scan이 모두 켜져 있으면 1, 모두 꺼져 있으면 0, 그 외에는 2입니다.
현재 동작 모드에 따라 동작합니다. BLE 모드(BTMODE=1)에서는 BLE 광고를 켜거나 끕니다. BT 모드(BTMODE=2)에서는 inquiry scan과 page scan을 켜거나 끕니다. 듀얼 모드(BTMODE=0)에서는 BLE 광고, inquiry scan, page scan을 함께 제어합니다.
하나 해제: AT+DISCONN=<conn_hdl>\r, 전체 해제: AT+DISCONN\r
응답
성공: \r\nOK\r\n, 실패 또는 찾을 수 없음: \r\nERROR\r\n
매개변수
<conn_hdl>: 연결 핸들이며 16진수입니다. BLE 연결 핸들은 1부터 시작하는 외부 핸들(AT+CONNLIST가 반환하는 값과 일치)이고, BT 연결은 ACL 핸들을 사용합니다. <conn_hdl> = 0은 잘못된 입력으로 간주되어 ERROR를 반환합니다.
비고
매개변수가 없거나 비어 있으면 활성 링크(BLE 및 BR/EDR) 전체를 해제하고 OK를 반환합니다. 매개변수가 있으면 핸들을 조회합니다. 먼저 BLE 외부 핸들과 대조하고(내부 핸들 = <conn_hdl> - 1), 찾지 못하면 원시 BT ACL 핸들과 대조하며, 일치하는 연결이 없으면 ERROR를 반환합니다. 조회 형태 AT+DISCONN?는 ERROR를 반환합니다.
활성 연결마다 한 줄로 출력됩니다: \r\n+CONNLIST:<conn_hdl>,<type>,<addr>,<extra>\r\n. 모든 줄 뒤에 \r\nOK\r\n이 따라오며, 활성 연결이 없으면 \r\nOK\r\n만 출력됩니다. 비어 있지 않은 매개변수가 있으면 \r\nERROR\r\n
매개변수
출력 필드: <conn_hdl> — 연결 핸들, 16진수 4자리이며 BLE는 1부터 시작하는 외부 핸들을 사용합니다. <type> — 연결 유형, BLE 또는 BT. <addr> — 상대방의 Bluetooth 주소, 16진수 12자리(최상위 바이트가 먼저). <extra> — BLE 연결은 현재 MTU, BT 연결은 서비스 채널이며 10진수입니다.
비고
설정 형태에서 비어 있지 않은 매개변수를 지정하면 ERROR를 반환합니다. 모듈은 모든 연결 슬롯을 확인하여 활성 연결을 각각 출력합니다.
AT+SPPSEND=<conn_hdl>,<data>\r 또는 AT+SPPSEND=,<data>\r
응답
성공: \r\nOK\r\n, 실패: \r\nERROR\r\n
매개변수
conn_hdl: 대상 BT 연결 핸들이며 16진수입니다. 생략하거나 0으로 설정할 수 있으며, 이 경우 현재 첫 번째 활성 BT 연결이 사용됩니다. data: 전송할 데이터이며 16진수 문자열이고, 두 문자가 1바이트를 나타냅니다. 비어 있을 수 없으며 문자 수는 짝수여야 합니다. ASCII AT 프레임으로 전달할 수 있는 실제 데이터 길이는 AT 프레임 하나의 제한에도 영향을 받습니다.
비고
conn_hdl과 data는 쉼표로 구분하며, conn_hdl을 생략하더라도 쉼표는 반드시 있어야 합니다. 조회 형태는 지원되지 않습니다.
idx: 서비스 슬롯 번호, 0~5. uuid: 서비스 UUID이며 MSB가 먼저 오는 16진수 문자열로 입력합니다. 16비트 UUID는 4자, 128비트 UUID는 32자입니다
비고
idx는 한 자리 숫자여야 하며 바로 뒤에 쉼표가 와야 합니다. UUID 길이는 정확히 4자 또는 32자여야 하며, 다른 길이는 ERROR를 반환합니다. 슬롯이 이미 프로토콜 스택에 등록되어 있으면 다시 설정할 수 없으며 생성은 ERROR를 반환합니다. 서비스를 생성하면 해당 슬롯의 이전 설정이 지워집니다
svc: 서비스 슬롯 번호, 0~5. chr: 특성 인덱스, 0~7. uuid: 특성 UUID이며 MSB가 먼저 오고, 16비트는 4자, 128비트는 32자입니다. prop: R(읽기), W(응답 있는 쓰기), w(응답 없는 쓰기), N(notify), I(indicate) 문자로 구성된 속성 문자열. len: 특성 값의 최대 길이, 1~512
비고
다섯 매개변수가 모두 필수이며, 하나라도 생략하면 ERROR를 반환합니다. UUID 길이는 정확히 4자 또는 32자여야 합니다. prop에는 인식되는 속성 문자가 하나 이상 있어야 하며, 인식되는 문자가 없으면 ERROR를 반환합니다. prop 안의 인식되지 않는 문자는 그냥 무시됩니다. len이 0이거나 512를 초과하면 ERROR를 반환합니다. 상위 서비스는 이미 생성되어 있어야 하며 아직 프로토콜 스택에 등록되지 않은 상태여야 합니다
AT+GATTSEND=<svc>,<chr>,<conn_hdl>,<hex>\r, 연결 핸들 생략: AT+GATTSEND=<svc>,<chr>,,<hex>\r
응답
성공: \r\nOK\r\n, 실패: \r\nERROR\r\n, 조회 형태 AT+GATTSEND?\r: \r\nERROR\r\n
매개변수
svc: 서비스 슬롯 번호. chr: 특성 인덱스. conn_hdl: BLE 연결 핸들이며 16진수, 1부터 시작하고 생략할 수 있습니다. hex: 전송할 데이터이며 문자 수가 짝수인 16진수 문자열입니다. ASCII AT 프레임으로 전달할 수 있는 실제 데이터 길이는 AT 프레임 하나의 제한에도 영향을 받습니다.
비고
conn_hdl을 생략하면 현재 첫 번째 BLE 연결이 사용됩니다. 대상 서비스는 이미 등록되어 있어야 하고 특성 인덱스가 유효해야 합니다. 특성의 속성에 Indicate(I)가 포함되어 있으면 indication을 사용하고, 그렇지 않으면 notification을 사용합니다.
명령 모드: \r\nIM_CONN <hdl>,<addr>,<mtu>\r\n, 패스스루 모드: \r\nIM_CONN\r\n
매개변수
hdl: 연결 핸들, 16진수 4자리(대문자, 4자리 고정, 0으로 채움). BLE 연결은 1부터 시작하는 핸들(내부 핸들에 1을 더한 값)을 표시하고, 다른 유형은 원시 값을 표시합니다. addr: 상대방의 주소, 16진수 12자리, MSB가 먼저. mtu: 현재 연결의 MTU, 10진수.
비고
명령 모드에서는 연결이 설정될 때마다 핸들, 상대방 주소, MTU와 함께 한 번씩 보고됩니다. 패스스루 모드에서는 연결 수가 1일 때(첫 번째 연결)만 보고되며 매개변수는 없습니다. 보고 여부는 AT+EVT가 제어하며, AT+EVT=1로 설정하면 보고되지 않습니다.
hdl: 해제된 연결의 핸들, 16진수 4자리(대문자, 4자리 고정, 0으로 채움). BLE 연결은 1부터 시작하는 핸들(원시 핸들에 1을 더한 값)을 표시하고, 나머지는 원시 값을 표시합니다.
비고
핸들만 포함하며 명령 모드에서만 보고되고, 패스스루 모드에서는 보고되지 않습니다. 모드와 관계없이 모든 연결이 끊어져 연결 수가 0으로 돌아오면 \r\nIM_READY\r\n이 추가로 보고됩니다. 보고 여부는 AT+EVT가 제어하며, AT+EVT=1로 설정하면 보고되지 않습니다.
바이너리 프레임(텍스트 AT 라인이 아님): AT> + opcode(2바이트 리틀 엔디언) + len(2바이트 리틀 엔디언) + body + \r. 여기서 opcode = 0x0101(바이트 순서 01 01), len은 body의 바이트 수, body = conn_hdl(2바이트 리틀 엔디언) + data입니다. data는 전송할 페이로드입니다.
응답
텍스트 응답 문자열이 없습니다. 펌웨어는 OK/ERROR로 응답하지 않고 연결 유형에 따라 data를 상대방에게 전달합니다.
매개변수
opcode: 0x0101로 고정. len: body 길이, 범위 2~508(2 미만이거나 AT_RX_BUF_SIZE-4를 초과하는 프레임은 폐기되며, AT_RX_BUF_SIZE = 512). conn_hdl: 대상 연결 핸들이며, BLE 연결은 1부터 시작(외부 표시 값), SPP 연결은 원시 ACL 핸들입니다. data: 페이로드 바이트, 길이 = len-2, 0일 수 있습니다.
비고
conn_hdl 확인 순서: 먼저 BLE의 1부터 시작하는 핸들과 대조하고(즉, conn_hdl-1이 BLE 슬롯에 해당), 찾지 못하면 SPP 슬롯의 원시 값과 대조하며, 연결을 찾지 못하면 프레임은 폐기됩니다. BLE 대상의 경우 펌웨어가 커스텀 GATT 서비스를 순회하여 Notify 또는 Indicate 속성이 있는 첫 번째 특성을 자동으로 선택해 전송하며, 그런 특성이 없으면 아무것도 전송하지 않습니다. SPP(BR/EDR) 대상의 경우 data가 SPP 채널로 전송됩니다. 프레임 바로 뒤에는 \r이 와야 하며, 없으면 현재 프레임은 폐기됩니다. 프레임 사이에서 PDU 타임아웃 임계값 안에 새 바이트가 도착하지 않으면 PDU 수신 상태가 리셋됩니다.
바이너리 프레임(텍스트 AT 라인이 아님): AT> + opcode(2바이트 리틀 엔디언) + len(2바이트 리틀 엔디언) + body + \r. 여기서 opcode = 0x0102(바이트 순서 02 01), len은 body의 바이트 수, body = conn_hdl(2바이트 리틀 엔디언) + svc_idx(1바이트) + char_idx(1바이트) + data입니다.
응답
텍스트 응답 문자열이 없습니다. 펌웨어는 OK/ERROR로 응답하지 않고 지정된 서비스/특성을 통해 data를 상대방에게 전송합니다.
매개변수
opcode: 0x0102로 고정. len: body 길이, 범위 4~508(수신 계층의 일반 하한은 2이지만 이 opcode는 svc_idx+char_idx를 포함하여 body가 4바이트 이상이어야 함). 그렇지 않으면 폐기됩니다. conn_hdl: 대상 BLE 연결 핸들이며 1부터 시작(외부 표시 값). svc_idx: 커스텀 GATT 서비스 인덱스. char_idx: 해당 서비스 내의 특성 인덱스. data: 페이로드 바이트, 길이 = len-4, 0일 수 있습니다.
비고
BLE 연결에만 해당하며, 확인된 연결이 SPP 유형이면 프레임은 폐기됩니다. svc_idx는 등록된 커스텀 서비스에 해당해야 하고 char_idx는 해당 서비스의 특성 수보다 작아야 하며, 그렇지 않으면 폐기됩니다. 지정한 특성에는 Notify 또는 Indicate 속성이 있어야 하며, 그렇지 않으면 폐기됩니다. conn_hdl 확인은 0x0101과 같은 규칙을 따릅니다(BLE의 1부터 시작하는 핸들을 먼저, 그다음 원시 값). 프레임 바로 뒤에는 \r이 와야 합니다.
conn_hdl: 해제할 연결 핸들이며 16진수입니다. BLE 연결은 1부터 시작(외부 표시 값)하며, 값이 0이면 안 됩니다(0은 잘못된 입력으로 간주되어 ERROR를 반환). SPP 연결은 원시 ACL 핸들을 사용합니다.
비고
매개변수가 없으면 현재 연결 전체를 해제하고 OK를 반환합니다. 매개변수가 있으면 확인 순서는 다음과 같습니다. 먼저 BLE의 1부터 시작하는 핸들과 대조하고(conn_hdl-1이 BLE 슬롯에 해당), 찾지 못하면 SPP 슬롯의 원시 값과 대조하며, 연결을 찾지 못하면 ERROR를 반환합니다. BLE 연결은 이유 코드 0x13으로 연결 해제를 시작하고, SPP 연결은 상대방 주소로 연결 해제를 시작합니다. 조회 형태 AT+DISCONN?는 ERROR를 반환합니다.
모듈이 스스로 보고하므로 호스트가 명령을 보낼 필요가 없습니다. IM_CONN은 연결이 설정될 때, IM_DISCONN은 연결이 끊어질 때 보고됩니다.
응답
명령 모드, 연결 설정: \r\nIM_CONN <hdl>,<mac>,<mtu>\r\n. 여기서 <hdl>은 16진수 4자리 핸들, <mac>은 16진수 12자리 주소(최상위 바이트가 먼저), <mtu>는 10진수 MTU입니다. 명령 모드, 연결 해제: \r\nIM_DISCONN:<hdl>\r\n(<hdl>은 16진수 4자리). 패스스루 모드는 첫 번째 연결이 설정될 때만 \r\nIM_CONN\r\n(매개변수 없음)을 보고하며, 연결이 해제될 때 IM_DISCONN은 보고하지 않습니다. 두 모드 모두 모든 연결이 끊어지면 \r\nIM_READY\r\n을 보고합니다.
매개변수
<hdl>: 연결 핸들. BLE 연결은 1부터 시작하는 값(내부 0부터 시작하는 값에 1을 더한 값)으로 표시되고, SPP 연결은 원시 핸들을 표시합니다. <mac>: 상대방의 Bluetooth 주소. <mtu>: 협상된 MTU.
비고
보고 여부는 AT+EVT가 제어합니다. 0(기본값)이면 알림이 정상적으로 보고되고, 1이면 IM_READY/IM_CONN/IM_DISCONN이 보고되지 않습니다. 보고 형식과 내용은 현재 동작 모드(명령 모드/패스스루 모드)에 따라 다르며, 위에 설명되어 있습니다.