文档内容:SI4463射频芯片的相关特定函数编写,比如SendCommand、WaitforCTS、GetResponse
时间节点:2014/11/7~2014/11/8
一、特定函数头文件设定
命令和属性的发送需要SendCommand函数、每次发完命令之后需要等待RFIC返回一个CTS信号、有些命令如Read INT需要从RFIC获取一个Response。还有一些读写FIFO的函数等。头文件中上述函数定义如下:
二、各函数定义
1、SendCommand
主函数中,一般都把要发送的Command值和其相应的内容赋给一个数组,然后再依据长度和起始地址发送。Main函数中使用SendCommand如下:
上述程序首先发送CMD即0x02,后面发送的值为写入Global Control Registers的值。具体的SendCommand的定义如下:
程序中首先要置nSEL为0,选中射频IC,再使用无返回的发送函数发送bCmdLength长度的pbCmdData指向的数据。最后置nSEL为1,不选射频IC。
2、WaitforCTS
关于CTS有流程图如下:
CTS用于保证SI4463内部的MCU已经完成了命令并准备将数据从SDO口输出。当读出的数据为FFh时,表示数据准备好并用于传送了。相应程序如下:
片选RFIC后,发送CTS_READ_CMD,之后使用带返回的SPI发送指令,并将返回的数据存入bCtsValue,断开片选。每次返回的值要进行判断,若不等于上面时序中所提到的FFh则再次尝试,可是尝试次数也是有限制的,即MAX_CTS_RETRY,定义如下:
当超过了最大尝试次数,依然没能读出正确的值时,返回1。返回0表示CTS到达了,返回1表示在最大尝试次数内CTS返回失败。
3、GetResponse
GetResponse在Main函数中只用在获取清除中断命令状态的后面,如下图所示:
GetResponse实现的功能不仅是WaitForCTS这一个功能,它还需要将读到的数值返回给变量abApi_Read中。程序如下所示:
前面的语句类似WaitForCTS,后面新添加了一个Spi_SendDataGetResp,用于将读出的bRespLength长度的数据存到pbRespData中。
4、ReadRxDataBuffer
进行读取FIFO内部的数据,同WaitForCTS类似,都需要先发送一个关于这个操作的Command,程序如下:
由程序中可以看到,需要先发送RX_FIFO_READ命令。再使用SendDataGetResp函数获得FIFO中的数据。
5、WriteTxDataBuffer
往FIFO中写数据,和4中的内容类似,只是内部使用的命令行与函数有区别。
从上述程序中可看到,使用的函数为SendDataNoResp,与上面读取FIFO时候是不同的。
上面的函数就构成了工程中所使用函数的主体部分。