TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1120如何设置能够连续发送FIFO的数据

您好,我读取了别人一个CC1120的配置,想知道他是如何实现只发送一次TX命令,然后不断输入FIFO数据就可以不停发送的功能。请大佬们指点一下,拜谢!

配置如下,对方的程序可以正常运行且能测到标准的频谱波形。我初始化以后却无法测到波形,好像没有发送出去

trxSpiCmdStrobe(CC112X_SRES);
//cc112xSpiWriteReg(CC112X_FREQ2, FREQ2, 1);
//cc112xSpiWriteReg(CC112X_FREQ1, FREQ1, 1);
//cc112xSpiWriteReg(CC112X_FREQ0, FREQ0, 1);

// Write registers to radio
for(i = 0;i < (sizeof(preferredSettings)/sizeof(registerSetting_t)); i++) {
writeByte[0] = preferredSettings[i].data;
cc112xSpiWriteReg(preferredSettings[i].addr, &writeByte, 1);
}
#if 1
cc112xSpiReadReg(preferredSettings[16].addr, &writeByte, 1);
trxSpiCmdStrobe(CC112X_SIDLE);
trxSpiCmdStrobe(CC112X_SFRX);
trxSpiCmdStrobe(CC112X_SFTX);
trxSpiCmdStrobe(CC112X_SIDLE);
writeByte[0] = 0x34;
writeByte[1] = 0x75;
writeByte[2] = 0xc5;
writeByte[3] = 0x8c;
cc112xSpiWriteReg(0x04, &writeByte, 4);
trxSpiCmdStrobe(CC112X_SIDLE);
trxSpiCmdStrobe(CC112X_SFRX);
trxSpiCmdStrobe(CC112X_SFTX);
trxSpiCmdStrobe(CC112X_SIDLE);
writeByte[0] = 0x6B;
writeByte[1] = 0x7f;
writeByte[2] = 0x30;
cc112xSpiWriteReg(0x2f0c, &writeByte, 3);
writeByte[0] = 0x79;
cc112xSpiWriteReg(0x2b, &writeByte, 1);
writeByte[0] = 0x02;
cc112xSpiWriteReg(0x01, &writeByte, 1);
writeByte[0] = 0x77;
cc112xSpiWriteReg(0x1e, &writeByte, 1);
writeByte[0] = 0x40;
cc112xSpiWriteReg(0x28, &writeByte, 1);

///////////////////////原发送设置/////////////////////////////////
#if 1
static const registerSetting_t preferredSettings[] = {
{CC112X_IOCFG3, 0x3F},//gpio3数字 01
{CC112X_IOCFG2, 0x02},//gpio2数字TX中断 Asserted when the TX FIFO is filled >=(127 ?FIFO_CFG.FIFO_THR).
{CC112X_IOCFG1, 0xB0},
{CC112X_IOCFG0, 0x7F},//gpio0数字 00 发送
{CC112X_SYNC3, 0x34},//sync word
{CC112X_SYNC2, 0x75},//sync word
{CC112X_SYNC1, 0xC5},//sync word
{CC112X_SYNC0, 0x8C},//sync word
{CC112X_SYNC_CFG1, 0x0A},
{CC112X_SYNC_CFG0, 0x00},//No sync word
// {CC112X_DEVIATION_M, 0x06},
{CC112X_MODCFG_DEV_E, 0x0C},//2-GFSK Frequency Deviation=8K
{CC112X_DCFILT_CFG, 0x1C},
{CC112X_PREAMBLE_CFG1, 0x00},//No preamble
{CC112X_PREAMBLE_CFG0, 0x00},//No preamble
// {CC112X_FREQ_IF_CFG, 0x00},
{CC112X_IQIC, 0x46},
{CC112X_CHAN_BW, 0x05},//RBW=40K
// {CC112X_MDMCFG1, 0x06},
{CC112X_MDMCFG0, 0x05},
{CC112X_SYMBOL_RATE2, 0x82},//Symbol Rate=17.6471KSPS
{CC112X_SYMBOL_RATE1, 0x12},
{CC112X_SYMBOL_RATE0, 0x15},
{CC112X_AGC_REF, 0x20},//AGC Reference Level {CC112X_AGC_CS_THR, 0x19},//AGC carrier sense threshold
// {CC112X_AGC_CFG3, 0x83},
// {CC112X_AGC_CFG2, 0x60},
{CC112X_AGC_CFG1, 0x09},//Automatic Gain Control
{CC112X_AGC_CFG0, 0xCF},//????????????????????????????????
{CC112X_FIFO_CFG, 0x77},//Threshold value for the RX and TX FIFO tx 8
{CC112X_SETTLING_CFG, 0x03},//Frequency Synthesizer Calibration and Settling {CC112X_FS_CFG, 0x12},
{CC112X_PKT_CFG2, 0x00},
{CC112X_PKT_CFG1, 0x00},
{CC112X_PKT_CFG0, 0x40},//10 : Infinite packet length mode
{CC112X_PKT_LEN, 0xff},
{CC112X_IF_MIX_CFG, 0x00},
{CC112X_FREQOFF_CFG, 0x22},
{CC112X_FREQ2, 0x66},//820MHZ
{CC112X_FREQ1, 0x80},
{CC112X_FREQ0, 0x30},
{CC112X_FS_DIG1, 0x00},
{CC112X_FS_DIG0, 0x5F},
{CC112X_FS_CAL1, 0x40},
{CC112X_FS_CAL0, 0x0E},
{CC112X_FS_DIVTWO, 0x03},
{CC112X_FS_DSM0, 0x33},
{CC112X_FS_DVC0, 0x17},
{CC112X_FS_PFD, 0x50},
{CC112X_FS_PRE, 0x6E},
{CC112X_FS_REG_DIV_CML, 0x14},
{CC112X_FS_SPARE, 0xAC},
{CC112X_FS_VCO0, 0xB4},
{CC112X_XOSC5, 0x0E},
{CC112X_XOSC1, 0x03},

};

Viki Shi:

1、需要提供更多背景信息,请问需要发送什么数据?是希望只有一个TX命令,然后完成无限的数据发送吗?为什么?
2、你那段别人有效的代码上,没看到有STX命令或者cc112xSpiWriteTxFifo
3、为什么RX和TX FIFO都进行操作?
4、这个在别人板上可行的例程,是否硬件方面跟你有所不同?你的板子使用例程时工作正常吗?

user6032134:

回复 Viki Shi:

你好,感谢你的回复,这是一个类似对讲机的项目
1,发送的是音频数据,是希望只有一个STX命令,然后完成无限的数据发送。因为音频数据是实时的,我用PACKET TX单次发送时传输数据速度太慢,要间隔几十ms,而且在频谱仪上不能测到标准波形,但PACKET TX单次发送和接收用官方给的例程和参数都是成功的,SPI肯定没有问题。
2,代码是我自己写的,上面只是人家的参数配置,是我用示波器破解出来的,我想请问一下他这样配置到底是怎样发射的,实现了标准频谱波形的输出,我用示波器观察对方的SPI输出,先是初始化,然后调用manualCalibration(T_VOID),然后就是一个STX发送命令,之后就不停的发送数据到TX FIFO里面了,而且发送数据总是在TXFIFO_THR 中断的时候,请问这是什么意思,数据又是如何发送出去的
3,RX实际上是不调用的,只是我测试时一起写了,
4,我用的就是别人的板子,只是把FLASH换掉了,我在这板子上测试例程都是正常的,把别人的flash换上去也还能正常工作,板子没有问题,

user6032134:

回复 Viki Shi:

我看了 Infinite packet length mode的例程,好像每次循环都要重新配置一些寄存器,而且每次要发一个STX命令,这和单次发送好像是一样的,

user6032134:

回复 Viki Shi:

我上面摘的程序就是我根据示波器读出来的别人的SPI时序写的,是配置寄存器部分。
cc112xSpiReadReg(preferredSettings[16].addr, &writeByte, 1);读的是MDMCFG0 (0x0013)寄存器,不知道有什么作用。
我观察他是发送STX命令后,每隔460US 发送一个0XAA(作为序言,本身序言是关闭的)给TX FIFO,发送46个0XAA后再次发送一个大包(连续发送40个字节),而且每次发送都是在GPIO2(TXFIFO_THR )中断的时候,也就是GPIO2(TXFIFO_THR )460US中断一次???
然后就是每隔20MS发送4个0XAA和一个大包(连续发送40个字节)无限循环,同样也是每次发送都有GPIO2(TXFIFO_THR )中断。不明白到底是中断时发送数据给TX FIFO,还是因为发送数据导致中断发生?为什么要这样做?

Viki Shi:

回复 user6032134:

1、就你的应用而言,无限的数据发送不是很必要,你们准备如何处理误码呢?为什么不增加datarate,使它们能够将数据转换为数据包并发送?

2、根据描述,你上面这段代码不是你从头开始写的,是你从别人的应用中逆推出来的?

user6032134:

回复 Viki Shi:

1,发送还是以包的形式发送的,我观察他程序运行时以20ms的间隔不停发送固定长度的包,不需要重复发送STX命令,

2,代码驱动都是自己写的,只是寄存器配置是从别人的产品中用示波器推出来的,他们的发送过程也是用示波器观察到的

我主要不明白以下两点是如何实现的

1,为什么他以20ms的间隔发送数据包给TXFIFO能够测到稳定的标准频谱波形,我用单次发送以5ms的速度发送都不能测到稳定的标准的频谱波形。

2,为什么他只需要发送一次STX命令就可以了,我看到的所有TI官方例程中每次发送都要发送一次STX命令。

感谢您的回复!!

赞(0)
未经允许不得转载:TI中文支持网 » CC1120如何设置能够连续发送FIFO的数据
分享到: 更多 (0)