深圳市創(chuàng)研數(shù)字通訊有限公司
聯(lián)系人:羅先生
手機:13692246378
電話:0755-85299996
郵箱:lokiqi@qq.com
網(wǎng)址:http://ihzf.com.cn
地址:深圳寶安35區(qū)東方鼎泰文創(chuàng)科技園212
深圳市創(chuàng)研數(shù)字通訊有限公司
聯(lián)系人:羅先生
手機:13692246378
電話:0755-85299996
郵箱:lokiqi@qq.com
網(wǎng)址:http://ihzf.com.cn
地址:深圳寶安35區(qū)東方鼎泰文創(chuàng)科技園212
基于A7130的,高音質(zhì)無線 耳機 (喇叭),2.4GHz 頻段的嬰兒監(jiān)控器 (影音傳輸),家庭保全,無線影像倒車?yán)走_(dá),無線遙控器以及無線玩具的產(chǎn)品設(shè)計方案
一,產(chǎn)品概述:
笙科電子(Amiccom)近期宣布推出第四代2.4GHz TRX芯片,該芯片料號為A7130 ,A7130是一顆可運作于高速4Mbps的射頻收發(fā)芯片,支持FSK與GFSK調(diào)變,MCU透過SPI接口即可驅(qū)動A7130,包含RF操作模式以及存取內(nèi)建的64 Bytes TXFIFO 與RXFIFO,與上一代的芯片在控制方式上完全相同。
A7130最大的優(yōu)勢在于高傳輸速率(4 Mbps)以及超高接收靈敏度 (-88dBm @ 4Mbps)。適合使用A7130的應(yīng)用有,高音質(zhì)無線 耳機 (喇叭),2.4GHz 頻段的嬰兒監(jiān)控器 (影音傳輸),家庭保全,無線影像倒車?yán)走_(dá),無線遙控器以及無線玩具等。笙科提供的完整參考設(shè)計,外圍組件僅需13顆,即可符合美國FCC part 15.247 以及歐洲ETSI EN300-440 的EMC規(guī)范,設(shè)計者不需多花時間調(diào)整射頻效能,即可享有更多的設(shè)計彈性。
RF效能部分,A7130內(nèi)建的PA,輸出功率高達(dá)5dBm,笙科電子的參考設(shè)計使用PCB天線,街道實測可得50米的傳輸距離。若搭配笙科電子的増距芯片(Range Extender, A7700, 17dBm 輸出功率),街道實測距離遠(yuǎn)達(dá)200米。A7130內(nèi)建的RSSI 可協(xié)助軟件工程師選擇干凈的信道傳輸,芯片內(nèi)部具備的Auto Calibration機制,可克服半導(dǎo)體的制程變異,穩(wěn)定地在各種環(huán)境下工作。
在數(shù)據(jù)的處理上,A7130提供封包偵錯 (FEC 與CRC),內(nèi)建的AES128加解密器可提供高質(zhì)量的防竊聽封包,自動應(yīng)答(Auto Ack)與自動重傳(Auto Resend)的機制可降低軟件開發(fā)的負(fù)擔(dān), 封包亦可選擇Manchester 編碼,大幅降低MCU處理數(shù)據(jù)串流的復(fù)雜度。電源管理部分支持Deep sleep mode,Sleep,Idle mode 與WOR 模式 (Wake On RX), WOR功能提供A7130自動喚醒,接收不定時的RF網(wǎng)絡(luò)封包,以延長電池的使用壽命。Deep Sleep mode相當(dāng)于完全關(guān)掉A7130,其電流消耗僅須100 nA。整體上,A7130內(nèi)建的功能可以有效地降低開發(fā)復(fù)雜度與開發(fā)成本。
A7130的幾個重要特性:
1、A7130的傳輸速度有3Mbps和4Mbps兩種,可見這速度傳輸圖片數(shù)據(jù)完全是沒問題的。
2、A7130有64Bytes的TX/RX FIFO,可擴展到4KBytes,這么大的FIFO,說明讀寫效率蠻可觀的。支持自動應(yīng)答自動重傳,CRC校驗,這在一定程度上保證了數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
3、A7130的控制寄存器支持3線或者4線的SPI方式的讀寫,也就是說無論是讀寫寄存器還是讀寫FIFO,都是通過SPI方式實現(xiàn)的。
4、A7130支持多種模式,可保證低功耗。
上面的這些信息將有助于我們接下來程序的編寫。
二、A7130 SPI接口
1、接口說明
A7130 only supports one SPI interface with maximum data rate up to 10Mbps. MCU should assert SCS pin low (SPI chip select) to active accessing of A7130. Via SPI interface, user can access control registers and issue Strobe command.
3-wire SPI (SCS, SCK and SDIO) or 4-wire SPI (SCS, SCK, SDIO and GIO1/GIO2) configuration is provided. For 3-wire SPI, SDIO pin is configured as bi-direction to be data input and output. For 4-wire SPI, SDIO pin is data input and GIO1 (or GIO2) pin is data output. In such case, GIO1S (0bh) or GIO2S (0ch) should be set to [0110].
手冊上說了需將SCS引腳拉低以選中芯片。3線SPI方式,SDIO引腳要配置成雙向輸入輸出引腳。對于4線的SPI,SDIO作為輸入引腳,GIO1和GIO2配置成輸出引腳。配置GIO1和GIO2需要將控制寄存器Reg0b的GIO1S置為0110或Reg0c的GIO2S置為0110.
A7130支持8中模式(Sleep,Idle,STBY,PLL,RX,TX,FIFO Write Reset,FIFO Read Reset)。在實際的編程中,后四種模式直接的狀態(tài)切換需要特別的注意。
2、SPI接口配置
在程序中,我們使用的是4線的SPI方式,使用到GIO2作為輸出。
創(chuàng)研數(shù)字引腳 A7130引腳
SPI_CS SCS
SPI_CLK SCK
SPI_MISO GIO2
SPI_MOSI SDIO
GPIOA_P1 GIO1
至于為什么要把GIO1接到PA1上面。因為在手冊中提到無論是數(shù)據(jù)從FIFO發(fā)出去完成還是從FIFO中接收完成,都將要有一個標(biāo)記來進(jìn)行判斷,此處我們把GIO1配置成發(fā)送接收完成的標(biāo)記。
在Reg0c中,我們將GIO1配置成WTR(Wait until TX or RX Finished)。
在發(fā)送模式下,進(jìn)入TX Mode,然后在RF Port中經(jīng)過一小段時間(PDL+TDL,這段時間可通過寄存器控制),芯片自動在數(shù)據(jù)前面加上Premable等數(shù)據(jù)然后發(fā)送出去,此時WTR(GIO1)為高電平,當(dāng)數(shù)據(jù)傳輸結(jié)束之后,WTR置為低電平,芯片自動進(jìn)去PLL Mode。這樣我們就可以通過判斷GIO1的引腳變化來判斷數(shù)據(jù)發(fā)送或者接收是否完成。
配置相關(guān)的SPI引腳之后,我們調(diào)用
A7130_SPI_Init()
1函數(shù),且之后調(diào)用
A7130_CS_HIGH()
把A7130的SCS引腳拉高,只有當(dāng)我們對A7130進(jìn)行操作時才拉低該引腳。當(dāng)然,上面那兩個函數(shù)要自己去封裝實現(xiàn)。
三、A7130寄存器配置及初始化
1、A7130配置代碼生成器
當(dāng)SPI配置完成后我們就要檢驗SPI是否通。最簡單的方式就是去讀寫它的芯片ID,看返回值是否是正確的,但是這步還不能實現(xiàn)。因為要讀寫芯片的ID之前要對A7130進(jìn)行初始化操作,具體怎么初始化,在手冊上面并沒有說。那么怎么驗證呢?首先嘗試著去讀寫某個寄存器,通過示波器看看時鐘是否正確,SPI寫入是否正確以及時序是否正確。當(dāng)這些都確認(rèn)無誤后,我們再去初始化A7130。
笙科公司為開發(fā)人員提供了一個工具RC_A7130_ReferenceCodeGenerator.exe可生成A7130的寄存器配置代碼,不過生成的代碼是仿SPI時序的,不是我們用的創(chuàng)研數(shù)字固件的SPI接口,所以還需要修改部分代碼。
注意紅色的區(qū)域要根據(jù)自己的配置進(jìn)行選擇。其中的RF IO Setting中除WTR外都可不用配置。
生成三個文件A7130reg.h(定義寄存器的名稱),define.h(數(shù)據(jù)類型的相關(guān)定義),main.c(主程序)。
2、main.c
2.1、各個寄存器的值
這里面包含A7130所有寄存器的配置信息以及數(shù)據(jù)發(fā)送接收的示例程序。這里只貼出配置信息。
//-----------------------------------------------------------------------------
// RF ID code
//-----------------------------------------------------------------------------
const Uint8 code ID_Tab[] =
{
0x54, 0x75, 0xC5, 0x2A
};
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// NOTE !!
// !! THIS CONFIG TABLE ONLY USE ON RF CRYSTAL = 16MHz !!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
const Uint16 code A7130Config[] =
{
// address name Descript
// ------- ---- ---------
0x00, //0x00 ; MODE_REG only reset, not use on config
0x62, //0x01 ; MODE_CONTROL_REG FIFO mode, Enable ARSSI, Enable AIF
0x00, //0x02 ; CALIBRATION_REG
0x3F, //0x03 ; FIFO1_REG
0x00, //0x04 ; FIFO2_REG
0x00, //0x05 ; FIFO_REG
0x00, //0x06 ; IDCODE_REG
0x00, //0x07 ; RCOSC1_REG
0x00, //0x08 ; RCOSC2_REG
0x00, //0x09 ; RCOSC3_REG
0x00, //0x0A ; CKO_REG
0x01, //0x0B ; GIO1 register, WTR
0x19, //0x0C ; GIO2 register, SDO
0x9F, //0x0D ; DATARATE_REG
0x00, //0x0E ; PLL1_REG
0x0E, //0x0F ; PLL2_REG RFbase 2400.001MHz
0x96, //0x10 ; PLL3_REG
0x00, //0x11 ; PLL4_REG
0x04, //0x12 ; PLL5_REG
0x3C, //0x13 ; ChannelGroup1 register
0x78, //0x14 ; ChannelGroup2 register
0xAF, //0x15 ; TX1_REG
0x40, //0x16 ; TX2_REG
0x10, //0x17 ; DELAY1_REG
0x60, //0x18 ; DELAY2_REG
0x70, //0x19 ; RX_REG
0x6F, //0x1A ; RXGAIN1
0xC2, //0x1B ; RXGAIN2
0x3D, //0x1C ; RXGAIN3
0xE7, //0x1D ; RXGAIN4
0x00, //0x1E ; RSSI_REG
0xF1, //0x1F ; ADC_REG
0x07, //0x20 ; CODE1_REG
0x06, //0x21 ; CODE2_REG
0x2A, //0x22 ; CODE3_REG
0x60, //0x23 ; IFCAL1_REG
0xFF, //0x24 ; IFCAL2_REG
0x80, //0x25 ; VCOCCAL_REG
0xD0, //0x26 ; VCOCAL1_REG
0x00, //0x27 ; VCOCAL2_REG
0x70, //0x28 ; VCO deviation 1 register
0x00, //0x29 ; VCO deviation 2 register
0x00, //0x2A ; DSA register
0xDC, //0x2B ; VCO Modulation delay register
0xF0, //0x2C ; BATTERY_REG
0x37, //0x2D ; TXTEST_REG
0x47, //0x2E ; RXDEM1_REG
0xF7, //0x2F ; RXDEM2_REG
0xF0, //0x30 ; CPC1_REG
0x37, //0x31 ; CPC2_REG
0x55, //0x32 ; CRYSTALTEST_REG
0x15, //0x33 ; PLLTEST_REG
0x15, //0x34 ; VCOTEST1_REG
0x00, //0x35 ; RF Analog register
0x00, //0x36 ; Key data register
0x77, //0x37 ; Channel select register
0x00, //0x38 ; ROM register
0x00, //0x39 ; DataRate register
0x00, //0x3A ; FCR register
0x00, //0x3B ; ARD register
0x00, //0x3C ; AFEP register
0x00, //0x3D ; FCB register
0x00, //0x3E ; KEYC register
0x00, //0x3F ; USID register
};
const Uint8 code A7130_Addr2A_Config[]=
{
0x34, //page0,
0x49, //page1,
0x00, //Page2,
0x80, //page3,
0x80, //page4,
0x00, //page5,
0x0A, //page6,
0x00, //page7,
};
const Uint8 code A7130_Addr38_Config[]=
{
0x00, //page0,
0x10, //page1,
0x20, //page2,
0x24, //page3,
0x20, //page4,
};
2、初始化
void initRF(void)
{
//init io pin
SCS = 1;
SCK = 0;
SDIO = 1;
GIO1 = 1;
GIO2 = 1;
A7130_Reset(); //reset A7105 RF chip
A7130_WriteID(); //write ID code
A7130_Config(); //config A7105 chip
A7130_Cal(); //calibration IF,VCO,VCOC
}
initRF();
StrobeCmd(CMD_STBY);
A7130_WriteReg( IFCAL2_REG, 0xFF ); //
A7130_WriteReg( TXTEST_REG, 0x37 ); // TX power = 5dBm
A7130_WriteReg( MODECTRL_REG, 0x62 ); // FIFO mode
A7130_WriteReg( PLL1_REG, 100 ); // set radio channel
A7130_WriteReg( CODE1_REG, 0x0F); // enable CRC check function
初始化A7130要Reset芯片,寫ID,配置,Cal校準(zhǔn),然后進(jìn)入STBY Mode,接下來設(shè)置發(fā)射功率等。上述的這些操作無非就是寫寄存器,最關(guān)鍵的一個函數(shù)當(dāng)然是A7130_WriteReg(Uint8 addr, Uint8 dataByte)。
void A7130_WriteReg(Uint8 addr, Uint8 dataByte)
{
Uint8 i;
SCS = 0;
addr |= 0x00; //bit cmd=0,r/w=0
for(i = 0; i < 8; i++)
{
if(addr & 0x80)
SDIO = 1;
else
SDIO = 0;
SCK = 1;
_nop_();
SCK = 0;
addr = addr << 1;
}
_nop_();
//send data byte
for(i = 0; i < 8; i++)
{
if(dataByte & 0x80)
SDIO = 1;
else
SDIO = 0;
SCK = 1;
_nop_();
SCK = 0;
dataByte = dataByte << 1;
}
SCS = 1;
}
里使用的是仿SPI的時序來寫寄存器,我們需要轉(zhuǎn)換為創(chuàng)研數(shù)字庫的形式,變成如下:
uint8_t SPI_SendByte(SPI_TypeDef *SPIx, uint8_t byte)
{
/*!< Loop while DR register in not empty */
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
/*!< Send byte through the SPI1 peripheral */
SPI_I2S_SendData(SPIx, byte);
/*!< Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
/*!< Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(SPIx);
}
void A7130_WriteReg(uint8_t addr, uint8_t dataByte)
{
A7130_CS_LOW();
addr |= 0x00; // bit6 write
SPI_SendByte(SPI1, addr); // locate register address for write
SPI_SendByte(SPI1, dataByte); // write data
A7130_CS_HIGH();
}
當(dāng)然,還有個讀寄存器的函數(shù)
uint8_t A7130_ReadReg(uint8_t addr)
{
uint8_t data;
A7130_CS_LOW();
addr |= 0x40; // bit6 read
SPI_SendByte(SPI1, addr);
data= SPI_SendByte(SPI1, 0xff); // 0xff is dummy bytes
A7130_CS_HIGH();
return data;
}
注意讀寫寄存器的時候,要遵循數(shù)據(jù)包的格式進(jìn)行書寫
最終,我們將A7130的初始化和配置集成到一個函數(shù)A7130_Init(),然后我們調(diào)用A7130_ReadID()讀取ID,看讀出來的數(shù)據(jù)是不是與我們之前在RC_A7130_ReferenceCodeGenerator.exe中設(shè)置的一樣。
四、A7130數(shù)據(jù)傳輸
1、發(fā)送數(shù)據(jù)
1、設(shè)置FIFO大??;
2、重置FIFO指針;
3、選中芯片
4、定位到TX FIFO寄存器;
5、寫入數(shù)據(jù)到TX FIFO中;
6、取消選中;
7、發(fā)送數(shù)據(jù);
8、等待發(fā)送完畢。
按照這六個步驟,把數(shù)據(jù)寫入到TX FIFO中,A7130就會自動把FIFO中的數(shù)據(jù)發(fā)送出去。
void A7130_WriteData(uint8_t data)
{
A7130_WriteReg(FIFO1_REG, 64); // setting FIFO length
A7130_StrobeCmd(CMD_TFR); // reset TX FIFO pointer
A7130_CS_LOW(); // select chip
SPI_SendByte(SPI1, FIFO_REG); // locate TX FIFO
SPI_SendByte(SPI1, data); // write data into TX FIFO
A7130_CS_HIGH();
A7130_StrobeCmd( CMD_TX ); // transmit data from RF port
while( A7130_isTxRxFinish() ); // wait until TX finished
}
2、接收數(shù)據(jù)
uint8_t A7130_ReadData(void)
{
uint8_t data = 0;
A7130_StrobeCmd(CMD_RX); // in RX Mode
while( A7130_isTxRxFinish() ); // wait until receieve finished
A7130_CS_LOW();
SPI_SendByte(SPI1, FIFO_REG | 0x40); // locate RX FIFO
data = ARC_SPI_SendByte(SPI1, 0xff); // read data
A7130_CS_HIGH();
return data;
}
五、A7130擴展
上述只是A7130的一些基本的操作,最終還是要根據(jù)項目來使用。為了保證數(shù)據(jù)的可靠傳輸,我們可以把發(fā)射功率設(shè)大,采用自動應(yīng)答自動重傳的機制進(jìn)行數(shù)據(jù)傳輸。為了讀寫速率,我們可以擴展FIFO。當(dāng)然這些都要配置相關(guān)的寄存器來實現(xiàn)。A7130還提供了諸多功能,用戶可根據(jù)需要配置寄存器。
六、A7130總結(jié)
A7130在傳輸速度上已經(jīng)很快了,但是有點遺憾的是數(shù)據(jù)傳輸?shù)目煽啃圆桓?。?jīng)過驗證,當(dāng)數(shù)據(jù)量大時或距離稍遠(yuǎn)時或者干擾較大,A7130的自動應(yīng)答和自動重傳并不如意。如果要保證數(shù)據(jù)的可靠性傳輸,需要用戶自己定義一種簡單的通信協(xié)議。但是如果數(shù)據(jù)量較小的情況下,可對該數(shù)據(jù)進(jìn)行編碼,然后再接收端進(jìn)行解碼。至于采用哪種編碼方式,需用戶根據(jù)自己的情況做出取舍。
二,技術(shù)規(guī)格:
Item
Specification
型號
A7139
工作電壓
3.3V-5V)
工作頻率
2400–2483.5MHz
可程式化發(fā)射功率
22dBm~26dBm
可程式化傳輸速率
2Mbps/6Mbps
調(diào)制模式
FSK/GFSK
工作電流
4uA@Sleepmode.
0.3mA@Idlemode.
2.7mA@Stand-byMode.
12.5mA@PLLMode.
31.3mA@Rxmode
發(fā)射功率
318mA@Txmode(Pout=22dBm)
接收靈敏度
-89dBm(typical)@4Mbpsmode,Dev=1MHz
機械尺寸
15mm(L)x21mm(W)x2.5mm(H)
工作溫度
-10~+60°C
電話:0755-85299996
手機:13692246378 羅先生
郵 箱:lokiqi@qq.com
地 址:深圳寶安35區(qū)塘坊花園一巷19號東方鼎泰文創(chuàng)科技園212
Copyright ? http://ihzf.com.cn/ 深圳市創(chuàng)研數(shù)字通訊有限公司 專業(yè)從事于FPV圖傳,電子內(nèi)窺鏡,無線車載方案, 歡迎來電咨詢!粵ICP備16059882號 Powered by 祥云平臺 技術(shù)支持:華企立方
熱推產(chǎn)品 | 主營區(qū)域: 深圳 上海 珠海 佛山 北京 廣州 山東 圖傳方案定制 無人機FPV圖傳 無線安防發(fā)射接收