27
BC3601 開發板應用範例 AN0480T V1.30 1/27 July 3, 2019 BC3601 開發板應用範例 文件編碼:AN0480T 簡介 Holtek 推出的全新雙向無線 FSK/GFSK 高效能射頻晶片 BC3601 ,適合在 1GHz 以下免執照的 ISM Band(300MHz~960MHz)應用;IC 整合高功率 PA、頻率合成器及數位解調功能,精簡外 圍電路,射頻特性符合 ETSI/FCC 規範。 BC3601 工作電壓為 2.0V~3.6V ,可程式設定發射功率,最高逹+17dBm ;高靈敏度接收能力, 最高傳輸速率逹 250kbps;具 ATR 自動收發(Auto Transmit Receive)功能,內置高精度低功秏 振盪器及省電模式自我喚醒收發功能,適合低功耗的電池及 IoT 產品需求,可廣泛應用於智 能居家/安防、汽車防盜器、工業/農業控制器等等無線雙向應用產品。 本篇將介紹 BC3601 搭配 M0+的系統開發板,依此範例程式,讓使用者瞭解 BC3601 RF 接收/發射(TRx)功能;透過本文範例的介紹,選擇適合的應用情境,進而開發出 RF 無線產 品。

Cost Effective C Handbook - Holtek · 2019-07-05 · BC3601開發板應用範例 AN0480T V1.30 1/27 July 3, 2019 BC3601 開發板應用範例 文件編碼:AN0480T 簡介 Holtek

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

  • BC3601 開發板應用範例

    AN0480T V1.30 1/27 July 3, 2019

    BC3601 開發板應用範例

    文件編碼:AN0480T

    簡介

    Holtek 推出的全新雙向無線 FSK/GFSK 高效能射頻晶片 BC3601,適合在 1GHz 以下免執照的

    ISM Band(300MHz~960MHz)應用;IC 整合高功率 PA、頻率合成器及數位解調功能,精簡外

    圍電路,射頻特性符合 ETSI/FCC 規範。

    BC3601 工作電壓為 2.0V~3.6V,可程式設定發射功率,最高逹+17dBm;高靈敏度接收能力,

    最高傳輸速率逹 250kbps;具 ATR 自動收發(Auto Transmit Receive)功能,內置高精度低功秏

    振盪器及省電模式自我喚醒收發功能,適合低功耗的電池及 IoT 產品需求,可廣泛應用於智

    能居家/安防、汽車防盜器、工業/農業控制器等等無線雙向應用產品。

    本篇將介紹 BC3601 搭配 M0+的系統開發板,依此範例程式,讓使用者瞭解 BC3601 的 RF

    接收/發射(TRx)功能;透過本文範例的介紹,選擇適合的應用情境,進而開發出 RF 無線產

    品。

  • BC3601 開發板應用範例

    AN0480T V1.30 2/27 July 3, 2019

    開發平台說明

    開發平台使用 Holtek 32-Bit Arm® Cortex

    ®-M0+ Microcontroller:HT32F52352 為主控制器的系統

    開發板 BCE-GENTrx32-001,搭配上 BC3601 的模組板:BCT-3601-001+BCM-3601-X02,完整

    平台結構,如下圖所示:

    圖 1. 系統架構圖

    HT32F52352 是 Arm® M0+的微控制器,使用者需先在電腦上需安裝 keil uVision 的 IDE 介面,

    及搭配 Holtk 所開發的 e-Link32 Pro,透過 JTAG 介面,對 HT32F52352 編輯程式(F/W),進一

    步瞭解 HT32F52352 請參考網址:http://www.holtek.com.tw/productdetail/-/vg/HT32F52342-52。

    http://www.holtek.com.tw/productdetail/-/vg/HT32F52342-52

  • BC3601 開發板應用範例

    AN0480T V1.30 3/27 July 3, 2019

    系統開發板介紹

    BCE-GENTrx32-001 開發板提供友善的人機介面,方便操作,如下圖示:

    1

    8

    4

    7

    6

    32

    5

    9

    10

    圖 2. 系統開發板組成

    其包涵:

    1. BCT-3601-001 + BCM-3601-X02 模組為 RF 發射/接收(TRx)電路;其中 BCT-3601-001 是一

    轉接板,電路可參考本文後的電路的說明。

    圖 3. BC3601 模組板

    2. 液晶顯示器(支援 128×64 點),參考本文範例程式,內含該顯示器的控制程式庫。

    3. 指示燈:LED×4 及按鍵×4,使用者在程式開發時,可利用其作指示及輸入功能。本範

    例程式中四個按鍵的功能分別為 KEY1=ESC(離開)、KEY2=Enter(進入)、KEY3=Left(功能

    選擇左移)、KEY4=Right(功能選擇右移)。

  • BC3601 開發板應用範例

    AN0480T V1.30 4/27 July 3, 2019

    圖 4. LED&KEY

    4. I/O 介面(Header24),包括 HT32F52352 的部份 I/O pin 及 BC3601 的 GIO3 跟 GIO4 pin,I/O

    如下圖示:

    圖 5. I/O 介面

    5. MCU 和 BC3601 模組板的電源檢測點。

    6. 系統電源選擇,可選擇由 USB 埠輸入供電、電池座或是另外的接點(如下圖 J1、J2)三種

    方式,系統板外接電源最高工作電壓 3.6V。

    圖 6. External Power Connect

    7. 總電源開關。

    8. Micro USB 介面,可用來作為系統電源輸入。

    9. 系統重置鍵。

    10. JTAG 介面,可配合 IDE 介面模擬程式及下載程式使用。

    BC36

    01 G

    IO3

    BC36

    01 G

    IO4

    REV

    .

    REV

    .

    BC36

    01 C

    SN\P

    A3

    BC36

    01 S

    CLK

    \PA

    0

    BC36

    01 M

    OSI

    \PA

    1

    BC36

    01 M

    ISO

    \PA

    2

    BC36

    01 IR

    Q\P

    C4

    PB12

    PA6

    PA7

    PB0

    PB1

    PA4

    PA5

    PB15

    PC0

    PC5

    PC3

    PD1

    PD2

    PC1

    PC2

  • BC3601 開發板應用範例

    AN0480T V1.30 5/27 July 3, 2019

    範例程式簡介

    取得 BCE-GENTrx32-001 開發板,已存在預設範例程式,該程式提供人機操作介面,直接操

    作 RF TRx 收發模式,讓使用者快速上手 BC3601 的功能,以下細項介紹操作方式:

    選單畫面

    啟動電源後,LCD 顯示畫面停在選單頁面,分成 12 個區塊的顯示,如下圖示,需使用開發

    板上的四顆按鍵操控「收發模式」或是「調整設定參數」,分項敘述:

    圖 7. 選單畫面區塊

    1. 主要項目(Main)顯示:啟動顯示項,共有 11 個項目。

    2. 測試項(Test Item):所有的收發模式都在這個項目下選擇,有以下幾種模式。

    Tx@Car:BC3601 持續發射 Tx 載波訊號,可以檢測模組的 Tx 發射功率

    Rx@BER:BC3601 處於 Rx 接收信號的狀態,GIO3 輸出接收到的 FSK 數位信號(Data),

    GIO4 會輸出資料的時脈(Clock),該模式可檢測模組接收靈敏度

    Tx@Smp:BC3601 設定 Simple FIFO 的發射信號模式

    Rx@Smp:BC3601 設定 Simple FIFO 的接收信號模式

    Tx@Blk:BC3601 設定 Block FIFO 的發射信號模式

    Rx@Blk:BC3601 設定 Block FIFO 的接收信號模式

    Tx@Ext:BC3601 設定 Extend FIFO 的發射信號模式

    Rx@Ext:BC3601 設定 Extend FIFO 的接收信號模式

    Tx@Inf:BC3601 設定 Infinite FIFO 的發射信號模式

    Rx@Inf:BC3601 設定 Infinite FIFO 的接收信號模式

    PER@M.:主機封包收發模式;主機 BC3601 會先發射信號後再進入接收模式,並等待

    從機的回覆信號

    PER@S.:從機封包收發模式;BC3601 會先進入接收模式,待接收到主機發射的信號

    後,便切換為發射模式傳送出回應信號

    RSSI..:讀出設定頻道的信號強度,顯示在畫面的下方

    LIRC..:可於 GIO3 量測 BC3601 內部的低頻(LIRC)振盪頻率值

    DpSlp.:BC3601 進入 Deep Sleep 模式,以量測模組睡眠狀況功耗

  • BC3601 開發板應用範例

    AN0480T V1.30 6/27 July 3, 2019

    Idle..:BC3601 進入 Idle 模式

    LtSlp.:BC3601 進入 Light Sleep 的模式

    StndBy:BC3601 進入 Standby 的狀態,以量測待機功耗

    3. Crystal:選擇 BC3601 所使用的晶振頻率,有 16.0MHz 或 19.2MHz 二種可以選擇,需依

    模組板上所使用的晶振作設定,BC3601 才能正常工作。

    4. RF Band:選擇 RF 頻段,開發板有作五種頻段選擇。

    315M:設定載波頻率為 315MHz

    433M:設定載波頻率為 433.92MHz

    470M:設定載波頻率為 470MHz

    868M:設定載波頻率為 868.3MHz

    915M:設定載波頻率為 915MHz

    5. TX Prmbl:選擇 TX 封包裡 Preamble 數(byte),可選 1~256 個 byte 前導碼。

    6. RX Prmbl:選擇 RX 需要偵測封包 Preamble 數(byte),可選 0、1、2、4 個 byte 四種。

    7. SyncWidth:Syncword 同步碼長度(byte)選擇,可選 4、6、8 個 byte 三種。

    8. SyncSel:Syncword 組合方式,F/W 建八種組合,使用者可自行依需要由 F/W 更改。

    9. Tx Power:RF 輸出功率設定,可選 0、+5、+10、+13、+17dBm 五種發射功率。

    10. Data Rate:資料傳輸的速率設定,有 2K、5K、10K、25K、50K、125K、250Kbps,七種

    可供選擇。

    11. PKT3 LB:此選項為設定 BC3601 PKT3 的 Low Nibble,其影響到的功能包含 Payload header

    field、Payload header address corrections 和 Payload Length field 的除/使能,以及 Payload header

    的長度(1、2byte),選擇方式如下表。

    Lv:PLLEN_EN=1 L-:PLLEN_EN=0

    Av:PLHAC_EN=1 A-:PLHAC_EN=0

    1 :PLHLEN=0 2 :PLHLEN=1

    Ev:PLH_EN=1 E-:PLH_EN=0

    表 1. PKT3 Low Nibble 設定表示

    12. En/Decode:此選項為設定 BC3601 PKT3 的 High Nibble,其影響到的功能包含 CRC field、

    FEC 和 Manchester Code 的除/始能,以及 CRC format 的選項(兩種),選擇方式如下表。

    Mv:MCH_EN=1 M-:MCH_EN=0

    Fv:FEC_EN=1 F-:FEC_EN=0

    Cv:CRC_EN=1 C-:CRC_EN=0

    0:CRCFMT=0 1:CRCFMT=1

    表 2. PKT3 High Nibble 設定表示

  • BC3601 開發板應用範例

    AN0480T V1.30 7/27 July 3, 2019

    範例程式架構說明

    介紹HT32F52352控制BC3601範例程式的流程及說明主程式及各個執行項流程,依序說明:

    主程式

    1. 初始化:這裡分為兩種初始化:MCU 功能的初始化(CKCU、GPIO、LED、KEY、LCM、

    BFTM)和 BC3601 基本功能的初始化(SPI、Crystal、VCO、LIRC、GIO Current、into Light Sleep

    Mode)。

    圖 8. 主程式初始化

    2. 等待計數器:主程式迴圈將會以 1ms 時間檢測按鍵是否有被改變,若是偵測按鍵改變,

    即改變按鍵狀態,通知系統按鍵被按下,以便下一個步驟判斷。

    3. 讀取按鍵:此步驟將會讀取按鍵的狀態,根據不同的狀態做不同的模式(此模式有 4 種:

    清單選項、Parameter 輸入、強制退出狀態與離開 Test_item 模式,上面除了 Parameter 輸

    入模式之外,其他都是 UI 介面的功能,後面會再說明 Parameter 輸入模式的功能)。

    4. 檢查 IRQ 狀態:這邊將檢查 BC3601 的硬體 IRQ 腳位的狀態是否為低電平。如果為低電

    平,表示 IRQ 旗標設定,IRQ 狀態儲存到暫存器並將 BC3601 的 IRQ 狀態清除。

    5. 根據 UI 介面所收到按鍵狀態判斷應該執行的功能去執行 BC3601 的 Test_Item。

    註 1、Parameter 輸入初始化:在範例程式裡的 parameter_initialization()這個副程式負責

    BC3601 的基本參數初始化,這些參數將會被寫入至 BC3601,由於這些參數只需要在

    BC3601 真正執行傳送或接收等等功能之前呼叫過一次即可,所以此副程式只會在 UI

    切換參數時確認執行後呼叫一次。其參數包含:XO 頻率、RF 頻率、TX Power、封包

    傳送路徑為 FIFO模式、TX/RX SYNWORD計算後填值、SYNWORD長度、TX/RX Preamble、

    編解碼方式、RX 封包資料長度、Data Rate 等等。

  • BC3601 開發板應用範例

    AN0480T V1.30 8/27 July 3, 2019

    圖 9. 主程式流程

    Tx@Smp

    TX Simple FIFO Mode 的流程主要分為 5 個區塊,下列將講解各個區塊內部的流程與作動方

    式。

    1. 將 pn9_data[ ](使用者欲傳送的資料)資料填入以便後面第 3 點可以將資料填入 FIFO。使

    用者在此步驟前需要先行提供所需要傳輸的資料,該資料位於 main.c 檔案裡的 pn9_data[ ]

    矩陣裡,該矩陣提供最大 64 byte 的容量供使用者填入。

    圖 10. Simple FIFO Mode 傳送資料設定

    2. 在此處我們將會把 ATR 的模式關閉,開啟 TXCMPIE(TX Complete)的 IRQ 功能。

    3. 這個步驟我們將重新設置 FIFO 的位址與 FIFO 的指標為初始值,填入 BC3601 PKT5 的暫

    存器寫入 TX 封包的資料長度,並將 TX 的資料從 Buffer 透過 SPI BUS 填入 FIFO,並且

    傳輸資料出去。

    4. 由於 TX 的模式較為簡單,在此處只需要檢查 TX 的完成旗標是否為 TRUE,若是旗標為

    真,代表 TX 傳輸完成,需要把 TX 的 IRQ 重置,並接續下一個步驟;告知下一個步驟

    需要跳出 TX Mode 的迴圈,並接續下一個步驟。

    5. 讓 BC3601 進入 Light Sleep Mode,並繼續檢查現在 TX 傳送的次數是否等於所需要傳輸

    的次數,或是檢查按鍵的狀態是否為需要離開的情況,若以上兩個條件成立其中一個,

    UI 介面與 BC3601 將結束工作並回到 UI 一開始的選單,若是條件都不成立則代表需要繼

    續傳送 TX,則將從第 3 點開始執行。

  • BC3601 開發板應用範例

    AN0480T V1.30 9/27 July 3, 2019

    圖 11. Simple FIFO Mode 傳送資料流程

    Rx@Smp

    RX Simple FIFO Mode 的流程分 5 個區塊,下列將講解各個區塊內部的流程與作動方式。

    1. 將 pn9_data[ ]資料填入以便(第 4 點)比對 FIFO 的資料。由於範例程式裡提供辨別資料的

    正確性與否來自與 pn9_data[ ] 矩陣裡的資料比對,使用者在此步驟前需要先行提供所需

    要比對的資料(或者使用者可以忽略此該步驟,直接接收資料即可),該資料位於 main.c

    檔案裡的 pn9_data[ ] 矩陣裡,該矩陣最大 64 byte 容量供填入。

    圖 12. Simple FIFO Mode 接收資料設定

    2. 在此處我們將會把 ATR 的模式關閉,開啟 RXCMPIE、RXERRIE(RX Complete、RX Error)

    的 IRQ 功能。

    3. 這個步驟我們將重新設置 FIFO 指標為初始值,並開始等待資料的接收。

    4. 由於 RX 的模式較 TX 多步驟,在此處需要檢查 RX 的完成與否與 RX 是否錯誤的旗標否

    為 TRUE,若是兩者旗標其中一個為真,代表 RX 接收完成或是 RX 封包錯誤,接著需要

    把 RX 的 IRQ 重置,並開始判別 RX Fail 的原因為何,首先會先將 IRQ1 的暫存器值和 RX

    的資料長度讀出來存到參數裡,並將 RX FIFO 的資料搬移至 RxPayloadBuffer。RX 可能

    出錯的狀況有三種:CRC 錯誤、封包長度錯誤跟資料錯誤,所以在此處我們將判斷以上

  • BC3601 開發板應用範例

    AN0480T V1.30 10/27 July 3, 2019

    這三種是否錯誤,假設 CRC 或是封包長度錯誤,Error_counter 的參數將會+1,此時將再

    比對一次資料的正確性與否,若是資料錯誤則將 Loss_counter 參數+1。若是 RX 沒有錯誤

    與上述流程走完,將 RX 接收次數刷新,並讀取 RSSI 值並隨時檢測到離開的按鍵時,

    UI 介面與 BC3601 將結束工作並回到 UI 一開始的選單。

    5. 將從第 3 點開始執行,並將刷新 RX 傳輸次數與 RX 的錯誤次數於螢幕。

    圖 13. Simple FIFO Mode 接收資料流程

    Tx@Blk

    TX Block FIFO Mode 的流程主要分為 5 個區塊,下列將講解各個區塊內部的流程與作動方式。

    1. 將 pn9_data[ ](使用者欲傳送的資料)資料填入以便後面第 3 點可以將資料填入 FIFO。使

    用者在此步驟前需要先行提供所需要傳輸的資料,該資料位於 main.c 檔案裡的 pn9_data[]

    矩陣裡,該矩陣提供最大 64 byte 的容量供使用者填入。

    圖 14. Block FIFO Mode 傳送資料設定

  • BC3601 開發板應用範例

    AN0480T V1.30 11/27 July 3, 2019

    2. 在此處我們將會把 ATR 的模式關閉,開啟 TXCMPIE(TX Complete)的 IRQ 功能。

    3. 這個步驟我們將重新設置 FIFO 的位址與 FIFO 的指標為初始值,填入 BC3601 PKT5 的暫

    存器寫入 TX 封包的資料長度、TX FIFO 起始地址,並將 TX 的資料從 Buffer 透過 SPI BUS

    填入 FIFO,並且傳輸資料出去。

    4. 由於 TX 的模式較為簡單,在此處只需要檢查 TX 的完成旗標是否為 TRUE,若是旗標為

    真,代表 TX 傳輸完成,需要把 TX 的 IRQ 重置,並接續下一個步驟;告知下一個步驟

    需要跳出 TX Mode 的迴圈,並接續下一個步驟。

    5. 讓 BC3601 進入 Light Sleep Mode,並繼續檢查現在 TX 傳送的次數是否等於所需要傳輸

    的次數,或是檢查按鍵的狀態是否為需要離開的情況,若以上兩個條件成立其中一個,

    UI 介面與 BC3601 將結束工作並回到 UI 一開始的選單,若是條件都不成立,則代表需要

    繼續傳送 TX,則將從第 3 點開始執行。

    圖 15. Block FIFO Mode 傳送資料流程

    Rx@Blk

    RX Block FIFO Mode 的流程主要分為 5 個區塊,下列將講解各個區塊內部的流程與作動方式。

    1. 將 pn9_data[ ]資料填入以便後面第 4 點可以比對 FIFO 的資料。由於範例程式裡提供辨別

    資料的正確性與否來自與 pn9_data[ ]矩陣裡的資料比對,使用者在此步驟前需要先行提

    供所需要比對的資料(或者使用者可以忽略此比對步驟,直接接收資料即可),該資料位

    於 main.c 檔案裡的 pn9_data[ ]矩陣裡,該矩陣提供最大 64 byte 的容量供使用者填入。

    圖 16. Block FIFO Mode 接收資料設定

  • BC3601 開發板應用範例

    AN0480T V1.30 12/27 July 3, 2019

    2. 在此處我們將會把 ATR 的模式關閉,開啟 RXCMPIE、RXERRIE(RX Complete、RX Error)

    的 IRQ 功能。

    3. 這個步驟我們將重新設置 FIFO 指標為初始值和填入 RX 的資料長度,並開始等待資料的

    接收。

    4. 由於 RX 的模式較 TX 多步驟,在此處需要檢查 RX 的完成與否與 RX 是否錯誤的旗標否

    為 TRUE,若是兩者旗標其中一個為真,代表 RX 接收完成或是 RX 封包錯誤,接著需要

    把 RX 的 IRQ 重置,並開始判別 RX Fail 的原因為何,首先會先將 IRQ1 的暫存器值和 RX

    的資料長度讀出來存到參數裡,並將 RX FIFO 的資料搬移至 RxPayloadBuffer。RX 可能

    出錯的狀況有三種:CRC 錯誤、封包長度錯誤跟資料錯誤,所以在此處我們將判斷以上

    這三種是否錯誤,假設 CRC 或是封包長度錯誤,Error_counter 的參數將會+1,若是資料

    錯誤則將 Error_counter 參數+1。若是 RX 沒有錯誤與上述流程走完,將 RX 接收次數刷新

    並讀取 RSSI 值並隨時檢測到離開的按鍵時,UI 介面與 BC3601 將結束工作並回到 UI 一

    開始的選單。

    5. 將從第 3 點開始執行,並將刷新 RX 傳輸次數與 RX 的錯誤次數於螢幕。

    圖 17. Block FIFO Mode 接收資料流程

  • BC3601 開發板應用範例

    AN0480T V1.30 13/27 July 3, 2019

    Tx@Ext

    TX Extend FIFO Mode 的流程分 5 個區塊,下列將講解各個區塊內部的流程與作動方式。

    1. 將 pn9_data[ ](使用者欲傳送的資料)資料填入以便後面第 3 點可以將資料填入 FIFO。使

    用者在此步驟前需要先行提供所需要傳輸的資料,該資料位於 main.c 檔案裡的 pn9_data[ ]

    矩陣裡,該矩陣提供最大 64 byte 的容量供使用者填入。但 Extend FIFO Mode 提供 255byte

    的資料長度,若使用者需要傳送超過 64 byte 的長度時,則必須另外開更大的矩陣。

    圖 18. Extend FIFO Mode 發射資料設定

    2. 在此處我們將會把 ATR 的模式關閉,開啟 TXCMPIE(TX Complete)和 FIFOLTIE(FIFO Low

    Threshold 的 IRQ 功能。

    3. 這個步驟我們將重新設置 FIFO 的位址與 FIFO 的指標為初始值,填入 BC3601 PKT5 的暫

    存器寫入 TX 封包的資料長度,並將 TX 的資料從 Buffer 透過 SPI BUS 填入 FIFO,但由

    於 BC3601 的實體 FIFO 只提供 64 byte,在這邊只先填入前面 64 byte 的資料,至於後續

    的資料則會在第 4 點內說明,並且先將此 64 byte 的資料傳輸出去。

    圖 19. Extend FIFO Mode 發射資料流程 2~3

    4. Extend FIFO Mode 的 TX 模式需要檢查兩個 IRQ,一個只需要檢查 TX 的完成旗標是否

    為 TRUE、一個則是檢查 FIFO Low Threshold IRQ,若是 TX 的完成旗標為真,代表 TX

    傳輸完成,需要把 TX 的 IRQ 重置,並接續下一個步驟;若是 FIFO Low Threshold IRQ

    的旗標為真,則代表 FIFO 已經讀取到所設定的低點(BC3601 FFMG[1:0]),此時 MCU

    將繼續填入資料給 FIFO(已讀取過的部分)和重置 FIFO Low Threshold IRQ,繼續傳輸等

    待下一次的 IRQ,並告知下一個步驟需要跳出 TX Mode 的迴圈接續下一個步驟。

  • BC3601 開發板應用範例

    AN0480T V1.30 14/27 July 3, 2019

    5. 讓 BC3601 進入 Light Sleep Mode,並繼續檢查現在 TX 傳送的次數是否等於所需要傳輸

    的次數,或是檢查按鍵的狀態是否為需要離開的情況,若以上兩個條件成立其中一個,

    UI 介面與 BC3601 將結束工作並回到 UI 一開始的選單,若是條件都不成立則代表需要繼

    續傳送 TX,則將從第 3 點開始執行。

    圖 20. Extend FIFO Mode 發射資料流程 4~5

    Rx@Ext

    RX Extend FIFO Mode 的流程主要分為 5 個區塊,下列將講解各個區塊內部的流程與作動方式。

    1. 將 pn9_data[ ]資料填入以便後面第 4 點可以比對 FIFO 的資料。由於範例程式裡提供辨別

    資料的正確性與否來自與 pn9_data[ ]矩陣裡的資料比對,使用者在此步驟前需要先行提

    供所需要比對的資料(或者使用者可以忽略此比對步驟,直接接收資料即可),該資料位

    於 main.c 檔案裡的 pn9_data[ ]矩陣裡,該矩陣提供最大 64 byte 的容量供使用者填入。但

    Extend FIFO Mode 提供 255byte 的資料長度,若使用者需要傳送超過 64 byte 的長度時,

    則必須另外開更大的矩陣。

    圖 21. Extend FIFO Mode 接收資料設定

    2. 在此處我們將會把ATR的模式關閉,開啟RXCMPIE、RXERRIE、FIFOLTIE (RX Complete、

    RX Error、FIFO Low Threshold)的 IRQ 功能。

    3. 這個步驟我們將重新設置 FIFO 指標為初始值和填入 RX 的資料長度,並開始等待資料的

    接收。

  • BC3601 開發板應用範例

    AN0480T V1.30 15/27 July 3, 2019

    4. Extend FIFO Mode 的 RX 模式需要檢查四個 IRQ,分別為檢查 RX 的完成旗標、檢查 RX

    失敗旗標、RX CRC Fail 旗標和檢查 FIFO Low Threshold IRQ,若是 FIFO Low Threshold IRQ

    的旗標為真,代表 FIFO 已經讀取到所設定的低點(BC3601 FFMG[1:0]),此時將 RX FIFO

    資料讀出至 RxPayloadBuffer 和重置 FIFO Low Threshold IRQ 並進行資料比對。若是 RX

    的完成與否與 RX 是否錯誤的旗標否為 TRUE,若是兩者旗標其中一個為真,代表 RX 接

    收完成或是 RX 封包錯誤,接著需要把 RX 的 IRQ 重置,並開始判別 RX Fail 的原因為何,

    首先會先將 IRQ1 的暫存器值和 RX 的資料長度讀出來存到參數裡,並將 RX FIFO 的資

    料搬移至 RxPayloadBuffer。

    RX 可能出錯的狀況有三種:CRC 錯誤、封包長度錯誤跟資料錯誤,所以在此處我們將

    判斷以上這三種是否錯誤,每種錯誤都會使 Error_counter 的參數將會+1。

    若是 RX 沒有錯誤與上述流程走完,將 RX 接收次數刷新並讀取 RSSI 值,並隨時檢測到

    離開的按鍵時,UI 介面與 BC3601 將結束工作並回到 UI 一開始的選單。

    5. 將從第 3 點開始執行,並將刷新 RX 傳輸次數與 RX 的錯誤次數於螢幕。

    圖 22. Extend FIFO Mode 接收資料流程

  • BC3601 開發板應用範例

    AN0480T V1.30 16/27 July 3, 2019

    Tx@Inf

    TX Infinite FIFO Mode 的流程主要分為 5 個區塊,下列將講解各個區塊內部的流程與作動方式。

    1. 將 pn9_data[ ](使用者欲傳送的資料)資料填入以便後面第 3 點可以將資料填入 FIFO。使

    用者在此步驟前需要先行提供所需要傳輸的資料,該資料位於 main.c 檔案裡的 pn9_data[ ]

    矩陣裡,該矩陣提供最大 64 byte的容量供使用者填入。但 Infinite FIFO Mode提供 1023 byte

    的資料長度,若使用者需要傳送超過 64 byte 的長度時,則必須另外開更大的矩陣。

    圖 23. Infinite FIFO Mode 傳送資料設定

    2. 在此處我們將會把 ATR 的模式關閉,開啟 TXCMPIE(TX Complete)和 FIFOLTIE(FIFO Low

    Threshold 的 IRQ 功能。

    3. 這個步驟我們將重新設置 FIFO 的位址與 FIFO 的指標為初始值,判斷封包資料長度是否

    大於 64,若是大於 64 則將 FFINF_EN 設置為 1;反之則關閉 FFINF_EN 和填入 TX 的資

    料長度,並將 TX 的資料從 Buffer 透過 SPI BUS 填入 FIFO,但由於 BC3601 的實體 FIFO

    只提供 64 byte,在這邊只先填入前面 64 byte 的資料,至於後續的資料則會在第 4 點內說

    明,並且先將此 64 byte 的資料傳輸出去。

    圖 24. Infinite FIFO Mode 傳送資料流程 2~3

    4. Infinite FIFO Mode 的 TX 模式需要檢查兩個 IRQ,一個只需要檢查 TX 的完成旗標是否

    為 TRUE、一個則是檢查 FIFO Low Threshold IRQ,若是 TX 的完成旗標為真,代表 TX

    傳輸完成,需要把 TX 的 IRQ 重置,並接續下一個步驟;若是 FIFO Low Threshold IRQ

    的旗標為真,則代表 FIFO 已經讀取到所設定的低點(BC3601 FFMG[1:0]),此時 MCU

    將繼續填入資料給 FIFO(已讀取過的部分)和重置 FIFO Low Threshold IRQ;若是在

    FFINF_EN設置為 1和剩餘的資料長度不足 192 byte的情況下,BC3601需要關閉 Infinite

    Mode (FFINF_EN=0),並且繼續傳輸等待下一次的 IRQ,並告知下一個步驟需要跳出

    TX Mode 的迴圈接續下一個步驟。

  • BC3601 開發板應用範例

    AN0480T V1.30 17/27 July 3, 2019

    5. 讓 BC3601 進入 Light Sleep Mode,並繼續檢查現在 TX 傳送的次數是否等於所需要傳輸

    的次數,或是檢查按鍵的狀態是否為需要離開的情況,若以上兩個條件成立其中一個,

    UI介面與BC3601將結束工作並回到UI一開始的選單並關閉 Infinite Mode (FFINF_EN = 0),

    若是條件都不成立則代表需要繼續傳送 TX,則將從第 3 點開始執行。

    圖 25. Infinite FIFO Mode 傳送資料流程 4~5

    Rx@Inf

    RX Infinite FIFO Mode 的流程主要分為 5 個區塊,下列將講解各個區塊內部的流程與作動方式。

    1. 將 pn9_data[ ]資料填入以便後面第 4 點可以比對 FIFO 的資料。由於範例程式裡提供辨別

    資料的正確性與否來自與 pn9_data[ ]矩陣裡的資料比對,使用者在此步驟前需要先行提

    供所需要比對的資料(或者使用者可以忽略此比對步驟,直接接收資料即可),該資料位

    於 main.c 檔案裡的 pn9_data[ ]矩陣裡,該矩陣提供最大 64 byte 的容量供使用者填入。但

    Infinite FIFO Mode 提供 1023 byte 的資料長度,若使用者需要傳送超過 64 byte 的長度時,

    則必須另外開更大的矩陣。

    圖 26. Infinite FIFO Mode 接收資料設定

    2. 在此處我們將會把ATR的模式關閉,開啟RXCMPIE、RXERRIE、FIFOLTIE (RX Complete、

    RX Error、FIFO Low Threshold)的 IRQ 功能。

  • BC3601 開發板應用範例

    AN0480T V1.30 18/27 July 3, 2019

    3. 這個步驟我們將重新設置 FIFO 指標為初始值和填入 RX 的資料長度,判斷封包資料長度

    是否大於 64,若是大於 64 則將 FFINF_EN 設置為 1;反之則關閉 FFINF_EN 並填入 RX

    的資料長度和開始等待資料的接收。

    圖 27. Infinite FIFO Mode 接收資料流程 2~3

    4. Infinite FIFO Mode 的 RX 模式需要檢查四個 IRQ,分別為檢查 RX 的完成旗標、檢查

    RX 失敗旗標、RX CRC Fail 旗標和檢查 FIFO Low Threshold IRQ,若是 FIFO Low

    Threshold IRQ 的旗標為真,代表 FIFO 已經讀取到所設定的低點(BC3601 FFMG[1:0]),

    此時MCU將填入資料給RxPayloadBuffer和重置 FIFO Low Threshold IRQ並進行資料比

    對;若是在 FFINF_EN 設置為 1 和剩餘的資料長度不足 192byte 的情況下,BC3601 需

    要關閉 Infinite Mode(FFINF_EN=0),並且繼續傳輸等待下一次的 IRQ。若是 RX 的完成

    與否與 RX 是否錯誤的旗標否為 TRUE,若是兩者旗標其中一個為真,代表 RX 接收

    完成或是 RX 封包錯誤,接著需要把 RX 的 IRQ 重置,並開始判別 RX Fail 的原因為

    何,首先會先將 IRQ1 的暫存器值和 RX 的資料長度讀出來存到參數裡,並將 RX FIFO

    的資料搬移至 RxPayloadBuffer。RX 可能出錯的狀況有三種:CRC 錯誤、封包長度錯

    誤跟資料錯誤,所以在此處我們將判斷以上這三種是否錯誤,每種錯誤都會使

    Error_counter 的參數將會+1。若是 RX 沒有錯誤與上述流程走完,將 RX 接收次數刷新

    並讀取 RSSI 值並隨時檢測到離開的按鍵時,UI 介面與 BC3601 將結束工作並回到 UI

    一開始的選單。

  • BC3601 開發板應用範例

    AN0480T V1.30 19/27 July 3, 2019

    5. 將從第 3 點開始執行,並將刷新 RX 傳輸次數與 RX 的錯誤次數於螢幕。

    圖 28. Infinite FIFO Mode 接收資料流程 4~5

    PER@M.

    Package Error Rate Mode的目的為測試BC3601的模組連續來回接收或傳送時的封包正確性:

    也就是說Master和 Slave模式會互相切換傳送與接收模式來檢查封包是否有遺失或錯誤的現

    象發生。

    PER Master Mode 的流程主要分為 5 個區塊,下列將講解各個區塊內部的流程與作動方式。

    1. 將 pn9_data[ ](使用者欲傳送的資料)資料填入以便後面第 3 點可以將資料填入 FIFO。使

    用者在此步驟前需要先行提供所需要傳輸的資料,該資料位於 main.c 檔案裡的 pn9_data[ ]

    矩陣裡,該矩陣提供最大 64 byte 的容量供使用者填入。

  • BC3601 開發板應用範例

    AN0480T V1.30 20/27 July 3, 2019

    圖 29. Package Error Mode 主機端資料設定

    2. 在此處我們將會把 ATR 的模式關閉,開啟 TXCMPIE、RXCMPIE、RXERRIE(TX Complete、

    RX Complete、RX Error)的 IRQ 功能。

    3. 這個步驟我們將重新設置 FIFO 的位址與 FIFO 的指標為初始值,填入 BC3601 PKT5 的暫

    存器寫入 TX,並將 TX 的資料從 Buffer 透過 SPI BUS 填入 FIFO,並且傳輸資料出去。

    4. 由於 TX 的模式較為簡單,在此處只需要檢查 TX 的完成旗標是否為 TRUE,若是旗標為

    真,代表 TX 傳輸完成,需要把 TX 的 IRQ 重置,將重新設置 FIFO 的指標為初始值並開

    啟 RX Mode 進入下一個步驟。

    圖 30. Package Error Mode 主機端流程 2~4

    5. PER Master Mode 的 RX 模式需要檢查三個 IRQ,分別為檢查 RX 的完成旗標、檢查 RX

    失敗旗標和 RX CRC Fail 旗標,依不同的狀態對不同的錯誤計數器累加;接著讓 BC3601

    進入 Light Sleep Mode,並繼續檢查現在 TX 傳送的次數是否等於所需要傳輸的次數,若

    是條件不成立則代表需要繼續傳送 TX,則將從第 3 點開始執行,並將刷新 TX/RX 傳輸

    次數與 RX 的錯誤次數於螢幕。

  • BC3601 開發板應用範例

    AN0480T V1.30 21/27 July 3, 2019

    圖 31. Package Error Mode 主機端流程 5

    PER@S.

    PER Slave Mode 的流程主要分為 6 個區塊,下列將講解各個區塊內部的流程與作動方式。

    1. 由於 PER Mode 並沒有提供資料比對的功能,初始化的步驟也跟 Master Mode 一樣,這裡

    的流程與上面的第一點一樣。

    2. 在此處我們將會把 ATR 的模式關閉,開啟 TXCMPIE、RXCMPIE、RXERRIE(TX Complete、

    RX Complete、RX Error)的 IRQ 功能。

    3. 這個步驟我們將重新設置 FIFO 指標為初始值,並開始等待資料的接收。

    4. RX模式需要檢查三個 IRQ,分別為檢查RX的完成旗標、檢查RX失敗旗標和RX CRC Fail

    旗標,依不同的狀態對不同的錯誤計數器累加。

  • BC3601 開發板應用範例

    AN0480T V1.30 22/27 July 3, 2019

    圖 32. Package Error Mode 從機端流程 2~4

    5. 接著我們將重新設置 FIFO 的位址與 FIFO 的指標為初始值,填入 BC3601 PKT5 的暫存器

    寫入 TX 封包的資料長度,並將 TX 的資料從 Buffer 透過 SPI BUS 填入 FIFO,並且傳輸

    資料出去。

    6. 若是 TX 的完成旗標是為 TRUE,代表 TX 傳輸完成,需要把 TX 的 IRQ 重置並將從第 3

    點開始執行,並將刷新 TX/RX 傳輸次數與 RX 的錯誤次數於螢幕。

    圖 33. Package Error Mode 從機端流程 5~6

  • BC3601 開發板應用範例

    AN0480T V1.30 23/27 July 3, 2019

    DpSlp、Idle、LtSlp、StndBy

    4 種執行項目用來檢測 BC3601 不同模式的耗電量,分別是 Deep Sleep Mode、Idle Mode、Light

    Sleep Mode 和 Standby Mode。量測可將 J6(下圖紅框處)的跳線座拔起來,串連一隻電流計即

    可。

    圖 34. J6 位置

  • BC3601 開發板應用範例

    AN0480T V1.30 24/27 July 3, 2019

    系統電路圖

    下圖為 BC3601 開發板電路圖,提供參考使用。

    電源

    Key & LED

    I/O 接點 & 與模組轉接板介面

    JTAG 介面 & LCD 介面

  • BC3601 開發板應用範例

    AN0480T V1.30 25/27 July 3, 2019

    主要控制器

  • BC3601 開發板應用範例

    AN0480T V1.30 26/27 July 3, 2019

    模組轉接板(BCT-3601-001)

    BC3601 模組(BCM-3601-X02)

    程式範例

    Source Code 檔。

    BC3601_DemoCode_M0+.rar

  • BC3601 開發板應用範例

    AN0480T V1.30 27/27 July 3, 2019

    結論

    本文介紹 Holtek BC3601 RF Transceiver 系統開發板的使用方式,以及使用 HT32F52352 控制

    BC3601 範例程式,執行不同收發模式的操作;範例程式流程說明,供使用者在開發程式時

    參考。

    參考資料

    參考文件 BC3601 DataSheet。

    如需進一步瞭解,敬請瀏覽 Holtek 官方網站 http://www.holtek.com.tw/home。

    版本及修改資訊

    Date 日期 Author 作者 Issue 發行、修訂說明

    2019.06.25 何信智(Ho,Walers) V1.30。更新程式範例程式。

    2018.10.15 何信智(Ho,Walers) V1.20。模組板 BCM-3601-X01 變更為 BCM-3601-X02。

    2018.05.21 吳柏穎(Wu, Popo)

    何信智(Ho,Walers) V1.10。

    2018.01.02 吳柏穎(Wu, Popo)

    何信智(Ho,Walers) V1.00。

    免責聲明

    本網頁所載的所有資料、商標、圖片、連結及其他資料等 (以下簡稱「資料」),只供參考

    之用,盛群半導體股份有限公司 (以下簡稱「本公司」) 將會隨時更改資料,並由本公司決

    定而不作另行通知。雖然本公司已盡力確保本網頁的資料準確性,但本公司並不保證該等

    資料均為準確無誤。本公司不會對任何錯誤或遺漏承擔責任。

    本公司不會對任何人士使用本網頁而引致任何損害 (包括但不限於電腦病毒、系統固障、資

    料損失) 承擔任何賠償。本網頁可能會連結至其他機構所提供的網頁,但這些網頁並不是由

    本公司所控制。本公司不對這些網頁所顯示的內容作出任何保證或承擔任何責任。

    責任限制

    在任何情況下,本公司並不須就任何人由於直接或間接進入或使用本網站,並就此內容上

    或任何產品、資訊或服務,而招致的任何損失或損害負任何責任。

    管轄法律

    本免責聲明受中華民國法律約束,並接受中華民國法院的管轄。

    免責聲明更新

    本公司保留隨時更新本免責聲明的權利,任何更改於本網站發佈時,立即生效。

    http://www.holtek.com.tw/home

    簡介開發平台說明範例程式簡介範例程式架構說明系統電路圖程式範例結論參考資料版本及修改資訊免責聲明

    /ColorImageDict > /JPEG2000ColorACSImageDict > /JPEG2000ColorImageDict > /AntiAliasGrayImages false /CropGrayImages true /GrayImageMinResolution 300 /GrayImageMinResolutionPolicy /OK /DownsampleGrayImages true /GrayImageDownsampleType /Bicubic /GrayImageResolution 300 /GrayImageDepth -1 /GrayImageMinDownsampleDepth 2 /GrayImageDownsampleThreshold 1.50000 /EncodeGrayImages true /GrayImageFilter /DCTEncode /AutoFilterGrayImages true /GrayImageAutoFilterStrategy /JPEG /GrayACSImageDict > /GrayImageDict > /JPEG2000GrayACSImageDict > /JPEG2000GrayImageDict > /AntiAliasMonoImages false /CropMonoImages true /MonoImageMinResolution 1200 /MonoImageMinResolutionPolicy /OK /DownsampleMonoImages true /MonoImageDownsampleType /Bicubic /MonoImageResolution 1200 /MonoImageDepth -1 /MonoImageDownsampleThreshold 1.50000 /EncodeMonoImages true /MonoImageFilter /CCITTFaxEncode /MonoImageDict > /AllowPSXObjects false /CheckCompliance [ /None ] /PDFX1aCheck false /PDFX3Check false /PDFXCompliantPDFOnly false /PDFXNoTrimBoxError true /PDFXTrimBoxToMediaBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXSetBleedBoxToMediaBox true /PDFXBleedBoxToTrimBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXOutputIntentProfile (None) /PDFXOutputConditionIdentifier () /PDFXOutputCondition () /PDFXRegistryName () /PDFXTrapped /False

    /CreateJDFFile false /Description > /Namespace [ (Adobe) (Common) (1.0) ] /OtherNamespaces [ > /FormElements false /GenerateStructure false /IncludeBookmarks false /IncludeHyperlinks false /IncludeInteractive false /IncludeLayers false /IncludeProfiles false /MultimediaHandling /UseObjectSettings /Namespace [ (Adobe) (CreativeSuite) (2.0) ] /PDFXOutputIntentProfileSelector /DocumentCMYK /PreserveEditing true /UntaggedCMYKHandling /LeaveUntagged /UntaggedRGBHandling /UseDocumentProfile /UseDocumentBleed false >> ]>> setdistillerparams> setpagedevice