1. 介紹
RFCOMM提供了基於L2CAP協議的串行(9針RS-232)模擬
RFCOMM支持在兩個藍牙設備間高達60路的通信連接,最新規范是V1.2
RFCOMM支持兩種設備類型,但並不對它們進行區分
Type 1: DTE, 通信終端(如計算機, 打印機) Type 2: DCE, 通信節點(調制解調器)
連接方式如下圖所示 
2. 服務
2.1 RS-232控制信號
RFCOMM模擬了9針RS-232接口,如下所示
| Pin | Circuit Name |
| 102 | Signal Common |
| 103 | Transmit Data(TD) |
| 104 | Received Data(RD) |
| 105 | Request to Send(RTS) |
| 106 | Clear to Send(CTS) |
| 107 | Data Set Ready(DSR) |
| 108 | Data Terminal Ready(DTR) |
| 109 | Data Carrier Detect(CD) |
| 125 | Ring Indicator(RI) |
2.2 Null Modem Emulation
當傳遞非數據通路的狀態信息時,不區分DTE和DCE設備;而用控制信號來代替相應的信號,下圖是對應關系
| GSM 07.10信號 | 對應RS-232控制信號 |
| RTS | DSR, DTR |
| RTR | RTS, CTS |
| IC | RI |
| DV | DCD |
當兩個同類設備(如DTE)互聯時,GSM 07.10傳輸控制信號時就會創建Null Modem
下圖顯示了兩個DTE設備相連時創建的Null Modem
2.3 多串口仿真
2.3.1 兩個設備間的多串口仿真
兩個使用RFCOMM通信的藍牙設備可以同時打開多個串口仿真
RFCOMM支持多大60路,但是一個設備實際能打開的數據依實現而定
一個數據鏈接標識(DLCI: 參考幀格式Address字段D+ServerChannel)標識一對客戶和服務器之間的持續連接
DLCI 在兩個設備間的RFCOMM會話中保持一致 DLCI 長度為6bit,在RFCOMM中其可用值區間為2~61 DLCI 0為控制信道 DLCI 1由於服務器信道概念不能使用 DLCI 62-63保留
在一次RFCOMM會話中,客戶和服務器可以分布在通信的兩端,每一端的客戶都可以獨立發起建立通信連接
因此可使用RFCOMM服務器信道的概念將DLCI值域空間在兩個正在進行通信的設備間進行划分
2.3.2 多仿真串口和多藍牙設備
多仿真串口和多藍牙設備,是可選的
如果藍牙設備支持多串口仿真,同時通信連接兩端允許使用不同BT設備
那么RFCOMM實體必須能夠運行多路復用會話,每個多路復用使用L2CAP信道標識符(CID)來區分
3. 接口
RFCOMM目的在於定義一個能夠利用仿真串口的協議
下圖是RFCOMM參考模型及相應描述
4. 幀類型
RFCOMM支持的幀(Frame)類型如下
| 類型 | 描述 |
| SABM | Set Asynchronous Balanced Mode (startup command) |
| UA | Unnumbered Acknowledgement (response when connected) |
| DISC | Disconnect (disconect command) |
| DM | Disconnected Mode (response to a command when disconected) |
| UIH | Unnumbered Information with Header check |
SABM、UA、DM、DISC是"low- level"控制幀
DLCI為0的UIH幀用來傳遞控制信息,DLCI不為0的UIH幀用來傳遞數據
5. 幀格式
RFCOMM幀格式如下所示 
5.1 Address字段
EA(Extern Address)字段: 在RFCOMM中,為1
C/R(Command/Response)字段: 表示該幀是一個Command還是Response,設置方式如下圖所示
DCLI: direction bit and server channel, 通常initator將D位(即最低位)設置為1,而Responser則將其設置為0
故initator的DCLI的值總是基數(3,5,7,…,61),而Responser則為偶數(2,4,6,…,60)
5.2 Control字段
Control字段用來標識幀的類型,下圖是相關值
其中,P/F是Poll/Final位,在Commands中,被稱為P位;而在Responses中則被稱為F位
當發送的Command需要一個相應時,就將P置1,接收方收到這樣的命令時需要馬上響應並將F置1
如果接收到P/F位置為0的SABM或DISC幀,接收方將把它們丟棄
DM幀不考慮P/F的設置。
5.3 Length字段
Length字段由最低位的EA來決定其長度
當EA為1時,長度為7bits(0~127)
當EA為0時,長度為15bits(0~32767)
其中,RFCOMM幀的默認長度為127,最大長度為32767
5.4 Data字段
Data字段僅僅在UIH幀中存在,其長度限制由L2CAP的MTU所限制
5.5 FCS字段
用於接收方校驗接收數據是否正確,校驗原理采用循環冗余校驗CRC-8
對於SABM,DISC,UA和DM幀,FCS計算Address,Control and Length字段
對於UIH幀,FCS計算Address and Control字段
6. Multiplexor Frames
Multiplexorm Commands and Responses在DLCI=0在發送用於控制RFCOMM連接
有七種類型的Commands or Responses
| Commands/Responses | Description |
| PN | DLC parameter negotiation |
| Test | Test Command |
| FCon/FCoff | Flow Control On/Off Command |
| MSC | Modem Status Command, used for flow control |
| RPN | Remote Port Negotiation |
| RLS | Remote Line Status |
| NSC | Non Supported Command (response only) |
注意: 當收到一個不支持的命令時應該回應NSC
上面的這些命令和相應通過UIH幀(DLCI=0)來封裝
可以在一個RFCOMM幀中封裝多個命令,也可以將一個命令拆分至多個RFCOMM幀
Multiplexor Frames的格式如下圖 
