cc3200自带ROM中带有三部分程序:设备初始化固件,BOOTLOADER,外设驱动库
当设备上电、复位、或者从冬眠中唤醒时,先执行初始化程序,然后BOOTLOADER开始执行,将程序代码从FLASH复制到内部RAM中,最后中转到程序入口开始执行。
1 CC3200 ROM SERVICES
CC3200ROM包含有BOOTLOADER 和外设驱动库。外设驱动库是外设程序的接口集合。在ROM中提供驱动库,可以减少用户应用程序对RAM的占用。
BOOTLOADER有两个作用:烧写外部FLASH,和装载外部FALSH中的用户程序到MCURAM中。
1.1 CC3200 BOOTLOADER
ROM中BOOTLOADER的两个用途:
l 更新/下载:从PC中下载应用程序文件到CC3200。Bootloader-DNLD只有当板子在SOP(UARTLOADSense On Power)模式下才能被启动。
l 引导程序:负责在外部FALSH中扫描有效的应用程序。找到应用程序后,将程序装载到内部RAM中,然后,将MCU控制权交给应用程序
1.1.1 BOOTLOADER 工作模式选择:改变SOP引脚状态
CC3200有三个SOP引脚,根据上文介绍,BOOTLOADER有两种模式:
l 设置SOP]2:0] =0B100,BOOTLOADER进入下载模式,在下载模式下,一个外部的触发信号可以一个相应的操作,如simplelink 编程应用通过UART发送一个”break”信号,然后跟随相应的序列,可以将应用程序文件烧写到外部串行FLASH中。
l 设置SOP[2:0]=0B000,BOOTLOADER进入引导程序,加载应用程序到MCU内部RAM
1.1.2 BOOTLOADER和应用共享RAM
在下载模式下,BOOTLOADER需要占用MCU内部RAM的16K空间,这意味着,对于最大256K内部RAM的CC3200来说,留给应用程序的RAM空间最大为240K。以下几点需要开发者注意:
l MCU RAM地址范围从0x20000000 - 0x20003FFF:这个空间是由BOOTLOADER和应用程序共享的。开发者只能把这个空间当作数据空间,而不能当作代码空间;这样才能保证当BOOTLOADER装载用户代码到RAM中时,这个空间范围是由BOOTLOADER独占的。一旦内核控制权移交到应用程序,这个空间可以用来当作应用程序的数据空间。
l 0x20004000to END of RAM:这个空间被应用程序独享。应用程序的代码必须存放在这个范围内,并用由0x20004000作为起始地址。
l 不同型号的芯片RAM范围有所不同:
– CC3200R1M1:0x20004000 - 0x20020000
– XCC3200JR, CC3200R1M2: 0x20004000 - 0x20040000
– XCC3200HZ: 0x20004000 - 0x20030000
1.2 CC3200 ROM中的驱动库
用户的应用程序可以调用ROM中的设备驱动函数。CC3200SDK包中有整个驱动库的源代码,开发者可以用驱动库建立一个应用,在RAM中直接调用这些驱动函数。
这一章的目的是告诉开发者怎样使用驱动函数,重写驱动函数,扩展新的驱动函数
1.2.1 访问ROM中的驱动库
在ROM空间中,通过以下重定向列表,可以调用到相应的ROM API,同时在兼容现有API的基础上,允许未来进行扩展。在以后的ROM版本中,API的存放位置可能会改变,但是API列表不会改变。
API列表分为两部分:主列表和次列表。主列表中,一个外设对应一个地址指针,这个指针指向此外设的次列表空间;每一种外设对应有一个次列表,次列表中包含有外设相关的所有API地址。
主列表在ROM中的地址为0x0000040C,以下表中列表举了一小部分API列表:
ROM_INTERRUPTTABLE的地址为0x0000041C,ROM_IntMasterEnable()函数的地址为ROM_INTERRUPTTABLE地址向后偏移4。
ROM_APITABLE是一个存放在地址0x0000040C上的指针。
ROM_INTERRUPTTABLE是一个存放在地址ROM_APITABLE[4]上的指针数据。
ROM_INTERRUPTTABLE [1]表示一个函数指针,这个指针指向ROM_IntMasterEnable函数。
1.2.2 将ROM API链接到用户程序
1. 所有用到驱动库API的.c文件必须按顺序包含以下头文件:
i. • #include rom.h
• #include rom_map.h
2. 所有工程文件必须添加定义:define TARGET_IS_CC3200
3. 调用API时,必须在前边加MAP_;如,要调用UARTCharPut,就要调用MAP_UARTCharPut.任何对API的改动或扩展也要遵守这个原则。
4. 重新编译相关的工程。
1.2.3 重定义ROM API
对ROM API重定义后,API是存放在RAM中的,调用RAM的API代码。
1. 在文件\driverlib\rom_patch.h 中声明需要重定义的API函数
2. 例如:要重定义MAP_UARTCharPut和MAP_UARTBreakCtl,则在rom_patch.h文件中添加:
a) • #undef ROM_UARTCharPut
• #undef ROM_UARTBreakCtl
3. 重新编译相关工程
1.2.4 完全使用RAM中的驱动库
删除全局定义define TARGET_IS_CC3200,重新编译工程。
1 配置
1.1 概述
WIFI配置,即用AP名称(即SSID)和密码将一个WIFI设备(站点)接入到网络(AP)的过程。WIFI安全标准有个人安全级别(家庭、办公室等)和企业安全级别(大型办公环境和集团办公环境)。建立企业级的WIFI连接,通常需要安装IT部门用安全服务器生成的证书,来保证站点和网络的可靠性。而个人WIFI的安全,需要用户自己在家解决,通常采用安全密码,为了提高网络的安全,密码最长可以达到64个字节。
1.2 SmartConfig
1.2.1 概述
SmardConfig是TI在2012年开始引入的技术,用于配置没有多余周边设备的WIFI站点。用户通过手机、平板或者笔记本电脑将相应的网络认证信息广播给一个未配置的WIFI设备。当未配置的设备触发SmartCofnig,它将进入扫描状态,等待智能手机APP广播出来的网络配置信息。为了发送SmartConfig信号,手机必须已经连接到一个WIFI网络,通常就是WIFI新设备将要接入的网络。
1.2.2 使用说明(API)
1.2.2.1 自动激活(出厂例程)
给设备通电,通常设备先进入STA角色,如果之前没有添加过配置信息,设备在几秒钟无操作后,自动进入SmartConfig状态。
在智能手机或PC上启动SmartConfig应用:
1. 将手机或PC连接到任意一个WIFI
2. 在APP上输入WLAN认证信息(SSID,安全证书)
3. 输入密码
4. 点击开始按钮
SmartCofnig操作会在几秒内完成,最长需要两分钟。如果要目标网络离地很近,WIFI设备会立即连接上。
使用自动激活需要注意:
1. 对WIFI设备的任何命令都将会中断SmartConfig操作
2. 如果设备串行FLASH中保存有密钥,WIFI密码将会被加密,用户需要提供密钥
3. 如果SmartCofnig自动开始将,设备配置信息被改变,可能会有意外发生,这种情况下保证以下几点:
l 设置为自动开始策略
l 设置为自动开始SmartConfig
l 之前没有添加过配置信息
用户可以调用sl_WlanPloicyGet(SL_POLICY_CONNECTION,0, pVal, pValLen);来查看确认以上配置,返回的策略信息保存在回调指针pVal的位置上。
如果位0为1,表示Auto Start已设置
如果位4为1,表示Auto SmartCofnig已设置
如果相应的配置不符,可以手动设置策略:
Sl_WlanPolicySet(SL_POLICY_CONNECTION,SL_CONNECTION_POLICY(1, 0, 0, 0, 1), NULL, 0);
为了确保没有保存错误的配置信息,可以先删除之前保存的配置信息:sl_WlanProfileDel(255);
调用这些命令后,复位设备,SmartConfig将会被成功启动。
1.2.2.2 手动激活
手动开户SmartConfig,调用以下命令:
Sl_WlanSmartCofnigStart(groupIdBitmask, cipher, publicKeyLen,group1KeyLen, group2KeyLen, publicKey, group1Key, group2Key)
参数介绍:
l groupIdBitmask – 1为默认组ID掩码
当密钥没有保存在FALSH中时,需要使用加密密码,参考以下参数:
l cipher = 1
l publicKeyLen = 16
l group1KeyLen = 0
l group2KeyLen = 0
l publicKey = 此处为密钥(16字节字符串)
l group1Key = NULL
l group2Key = NULL
当密钥保存在FLASH中时,为了使用密码密码,参考以下参数:
l cipher = 0
l publicKeyLen = 0
l group1KeyLen = 0
l group2KeyLen = 0
l publicKey = NULL
l group1Key = NULL
l group2Key = NULL
如果不需要使用密码密码,参考以下参数
l cipher = 1
l publicKeyLen = 0
l group1KeyLen = 0
l group2KeyLen = 0
l publicKey = NULL
l group1Key = NULL
l group2Key = NULL
调用这条命令后,SmartConfig将会启动
手动启动SmartConfig时,如果加密密码的密钥保存在外部FLASH,或者由命令传入,则密钥必须先同SmartConfig APP提供
1.2.2.3 停止 Smart Config
调用以下命令停止S martCofnig:
Sl_WlanSmartCofnigStop()
注意:
l 设备接入目标网络后,会从AP或者路由器收到一个IP地址
l 如果智能手机连接的WIFI网络使用的发送模式和速率对SmartCofnig来说不合适,SmartCofnig操作可能不会成功。这种情况下需要使用AP配置方法。
1.3 ACRESS POINT模式
1.3.1 简介
对于没有输入接口的设备,配置网络最常用的方法是AP模式。在AP模式,未配置的设备作为一个AP来启动,制造通常会为设备定义一个默认的SSID。当第一次接入家庭网络前,新设备先创建一个属于自己的网络,PC或者智能手机可以直接接入这个网络,完成它的第一次网络配置。
1.3.2 使用方法及API
1.3.2.1 首先,启动设备为AP角色,有两个方法:
a) 调用sl_WlanSetMode(mode), mode应该为ROLE_AP,然后重启设备
b) 强制设备以 AP方式启动
1.3.2.2 用智能手机或者其它带有WIFI功能的设备扫描目标设备。在可用WIFI列表中,我们的设备名称应该为mysimplelink-xxyyzz,xxyyzz是设备MAC地址的后6字节。如果你调用过sl_WlanCfgSet(0, 0, ssid_length, ssid)修改设备SSID,你修改的SSID会出现在WIFI列表 中。如果 你没有修改过SSID,但是修改过设备URN(调用sl_NetAppSet(16,0, urn_length, urn),那么设备名称应该为urn_xxyyzz, xxyyzz为设备MAC地址的后6字节。
1.3.2.3 在WIFI列表界面,选择目标设备网络并连接
注:如果你没有修改过安全模式,设备的网络应该为开放网络。否则你需要输入相应的密码
1.3.2.4 接入设备网络后,在手机上打开浏览器,输入地址:http://www.mysimplelink.net
1.3.2.5 进入Profiles 选项
1.3.2.6 输入WLAN 认证信息(SSID, 安全类型,密钥),选择这个配置参数的优先级(0-7任一数值),点击Add 按钮
1.3.2.7 滚动到页面最低部,检查刚才添加的网络是否被添加上(此处不会显示密码)
1.3.2.8 以STA 角色重启设备。在Device Config页面设置设备械为Station(或者取下强制AP跳帽P58),复位设备。设备重启后,会自动连接到设置好的目标网络。
1.3.3 以AP方式配置时需要注意:
当用智能手机连接到设备AP时,设备上运行有DHCP服务器,并且会分配给手机一个IP地址。所以,智能手机(或者其它设备)不能使用静态的IP地址
输入WIFI认证信息后,选择STA模式,复位设备。设备将会连接到目标网络,并且从AP或者路由器接收到一个IP地址。