原创
转载请注明出处,侵权必究
1、RS9113简介
RS9113-N00-D1C是Redpine Signals推出的一款支持2.4/5GHz的WIFI模组。

2、SPI通信代码移植
2.1 移植源代码到工程
第1步,加入binary到工程
RS9113.NBZ.WC.GEN.OSI.1.6.6\host(包含at、binary和sapis三个文件夹)中除了binary文件夹都删除,复制到MCU工程文件夹下。
这个RS9113.NBZ.WC.GEN.OSI.1.6.6是Redpine官方提供的源代码。1.6.6表示的是版本号。
第2步,工程文件夹添加
在Manage Projects Items -> Project Items -> Groups中添加以下三个文件夹。

第3步,添加文件
WLAN_CORE中添加 \RS9113.NBZ.WC.GEN.OSI.1.6.8\host\binary\apis\wlan\core\src中所有c文件
WLAN_HAL中添加 \RS9113.NBZ.WC.GEN.OSI.1.6.8\host\binary\apis\intf\spi\src中的文件(用于SPI相关)和 \FreeRTOS_F4_Demo\host\binary\apis\hal\src中所有文件。
WLAN_APP 中添加 \RS9113.NBZ.WC.GEN.OSI.1.6.8\host\binary\apis\wlan\ref_apps\src中除了rsi_wifi_state_mc.c的所有文件。
第4步,添加路径。
在Keil工程中添加路径。

..\host\binary\apis\hal\include;
..\host\binary\apis\intf\spi\include;
..\host\binary\apis\wlan\core\include;
..\host\binary\apis\wlan\ref_apps\include	
第5步,添加宏定义
rsi_global.h中添加
#define WLAN_ENABLE 1
rsi_api.h中添加SPI接口宏(默认就有,如果没有就添加一下)
#define RSI_INTERFACE RSI_SPI
第6步,编译和修改warning和error
主要包括:
- 函数声明的时候,函数参数括号内没有加void
第二行是正确的。
void rsi_interrupt_handler();
void rsi_interrupt_handler(void);
- 中断处理函数
屏蔽掉函数内的处理。
void rsi_interrupt_handler(void)
{
	//中断不在这里处理
//  rsi_app_cb.pkt_pending = RSI_TRUE;
//  rsi_irq_disable();
}
- 类型不匹配
char改成uint8
和rsi_uSocket 类型不匹配的就强制转化为rsi_uSocket
- 声明函数
uint8* rsi_itoa(uint32 val, uint8 *str)函数没有声明,找到后,在相应的h文件中声明。
2.2 修改底层硬件
第1步,移植SPI配置
第2步,修改rsi_spi_recv和rsi_spi_send
第3步,移植复位IO
第4步,移植中断
rsi_app_cb.pkt_pending = 1;//RSI_TRUE;
2.3 封装自己的函数
1、开始测试
WIFI_BOOT()
char WIFI_BOOT(void)
{
	/*清除Buff数据*/
	rsi_app_cb.pkt_pending=0;
	memset(&rsi_app_cb, 0, sizeof(rsi_app_cb));	
	/*检查SPi是否和模块正常通讯*/
	/*检查SPI  IO 硬件是否正常*/
	RspCode = rsi_sys_init();
	if(RspCode != 0)
	{
		return 1;
	}
	/*加载BOOT*/
	do{																					//GPIO_Bypass
		RspCode = rsi_waitfor_boardready();
		if((RspCode < 0) && (RspCode != -3))
			return 1;
	}while(RspCode == -3);
	/*选择固件*/
	RspCode = rsi_select_option(RSI_HOST_BOOTUP_OPTION);
	if(RspCode < 0)
		return 1;
	/*等待card read  Rsp=0x89*/
	RspCode=Read_PKT();
	if(RspCode!=0x89||rsi_app_cb.error_code!=0)
	{		
		//TODO
		return 1;//Hard_reset();
	}
	
	return 0;
}
2、连接硬件
3、rsi_sys_init能正常执行
说明移植成功。
欢迎关注我的微信公众号
互联网矿工
