- 参考链接:
概述
- 本篇基本都是参照TI官网的页面教程去实践学习的.所以一打开SimpleLink™ 以太网 MSP432E401Y MCU LaunchPad™ 开发套件页面,就会看到一个描述,下面很简单明确的指明开始用
LaunchPad
的步骤:- 第 1 步:购买 MSP-EXP432E401Y LaunchPad
- 第 2 步:下载 MSP432 SDK
- 第 3 步:完成开箱即用体验并接受 SimpleLink Academy 培训
SimpleLink™
以太网MSP432E401Y
微控制器LaunchPad™
开发套件是针对基于SimpleLink™ Arm® Cortex®-M4F
的以太网MCU的直观评估平台.以太网LaunchPad
开发套件通过集成以太网MAC
和一系列有线通信接口(包括:USB-OTG,CAN,Quad-SPI(QSSI),I2C,SPI,UART以及其他串行协议)将重点放在MSP432E401Y MCU
上.MSP432E4 MCU
采用了120MHz Arm Cortex-M4F CPU、1MB 闪存、256kB SRAM
和先进的加密加速器,为开发人员提供大量的处理资源,从而实现有线和无线连接栈及处理算法,开发稳健的以太网解决方案.开发人员可利用大量SimpleLink
无线MCU BoosterPack™
插件模块和SimpleLink
软件SDK插件,向应用无缝添加无线连接和云集成,从而构建支持物联网且可互操作的智能工业网关应用.SimpleLink MCU SDK Driver
中的代码可以在所有SimpleLink MCU
中100%可移植,所以即使需求改变,改用新的SimpleLink MCU
也并不意味着必须重新开始.
开箱即用体验
- 这里的原教程是在TI Resource Explorer里面,它的具体的路径是
Software > SimpleLink MSP432E4-SDK-3.30.00.22> SimpleLink Academy-3.30.01.00 > LaunchPad Out of Box Experience > MSP432E401Y LaunchPad Out of Box Experience
- 这里开箱使用体验是在Exosite loT 云平台进行的,所以要先在该平台上注册一个帐号.但是现在看来,还要付费才可以使用,所以就没有试用了.
Pin
脚定义图:
CC3120 BoosterPack
插件模块
- 在
SimpleLink Academy/Overview
的页面里找到了这个CC3120 BoosterPack 开箱体箱示例链接,它的真实在路径是CC3120 BoosterPack Out of Box Experience - SimpleLink SDK Wi-Fi Plugin Documentation Overview,这里选择的
TIREX
的绝对路径是/Software/SimpleLink SDK Plugins/Connectivity/SimpleLinkSDKWiFiPlugin(2.40.00.22)/Examples/Development Tools/MSP432E401Y LaunchPad/Demos/ethernet_wifi_tcp_echo/
项目,还具体细分的不同操作系统,不同的工具平台:- FreeRTOS
- CCS Compiler
- GCC Compiler
- IAR Compiler
- TI-RTOS
- CCS Compiler
- GCC Compiler
- IAR Compiler
- FreeRTOS
- 如果在网页中打开的上述工程,可以使用右角
Import
导入到CCS Cloud
中,如果在桌面版的CCS IDE
中的Resource Explorer
上述工程可以直接导入到本地的workerspace
目录里.
TI 云工具平台
通过浏览器打开https://dev.ti.com会看到一个左边栏加中间一个九宫的格的工具列表.从上到下,从左到右,依次是
Resource Explorer,CCS Cloud,SysConfig,UniFlash,GUI Composer Gallery,BoosterPack Checker,PinMux,E2E Community
.CCS Cloud
是一个网页版CCS IDE
它可以从Resource Explorer
导入示例工程,可以查看与编辑代码,但是不可以在线编译生成目标文件.CCS Cloud
左侧边栏会提示安装
TI CLOUD AGENT
会提升使用体验.这里是使用Firefox
浏览器,它会在浏览里安装TICloudAgent Bridge
插件.如果是使用Google Chrome
浏览器会提示无法安装浏览器插件,因为墙的原因.安装完插件还会提示下载安装TI Cloud Agent Application
.安装完成Agent
之后,刷新页面,侧边栏会提示安装一些必要的设备驱动,用于Device detected
.如果它检测到支持的设备在线,会在侧边栏里显示设备的ID号,Serial号
,以及相应的Get Started!
导航链接,这里的连接MSP-EXP432E401Y
会出现对应的GUI Composer Gallery,Resource Expolrer,SimpleLink Acdemy
三个链接.下面是使用在线版的
UniFlash
.
- 打开
Resource Expolrer > /Development/Kits and Boards/MSP432E401Y LaunchPad
会有该设备的详细描述,与《用户手册》等官方资料. - 打开
SimpleLink Acdemy > /Software/SimpleLink MSP432E4 SDK (3.30.00.22)/SimpleLink Academy (3.30.01.00)/Overview
会有进入最新的SDK
的学院教程页面.
- 打开
桌面版IDE
安装(CCSv9)
- CCS 版本历史与支持列表
- CCS_UniFlash
- UniFlash 快速使用指南
CCSTUDIO
其实也是在Eclipse
平台上二次开发出来的,所以使用习惯都与原生Eclipse IDE
是一样的.下载位置需要在ti.com
里注册一个帐号并同意它的使用条款. 也可以去TI Resource Explorer
打开树结构位置Development Tools > Integrated Development Environements > Code Composer Studio > Downloads
页面进行下载.- SYSCONFIG 系统配置工具
- StackOverFlow Eclipse 配置文件位置
- 使用 CCS 调试 SimpleLink LaunchPad 入门教程
安装
安装 SDK
通过使用TI Resource Explorer
安装
在
CCSv9
首面板里Getting Started
页里有Resource Explorer(Examples & Docs),New Proejct, Import Proejct
三个快捷链接.这里选择打开Resources Explorer
,打开会一直显示Starting TIREX ...
,视本机的网速快慢而定,如果偶然打开它了,最好是把自己需要用到的SDK
全部下载到本地,防止失联.打开可以设置 SDK 的下载路径,如下:
因为学习一种单片机的最好的方法是查看它官方的文档与SDK的示例,TI的官方文档与
SDK
示例非常丰富,除了线上的dev.ti.com
可以在线查看之外,一般手动下载的SDK
压缩包里,除了库文件之外还有文档与工具,这里是学习它最权威的资料.一个典型的SDK
目录结构如下:
1 | ~$ simplelink_msp432e4_sdk_3_30_00_22$ tree -L 2 |
手动安装
- 因为
Resource Explorer
在国内访问很不稳定,经常打不开,所以打开时可以先把这些文件下载下来,或者打包起来移到其它电脑的新系统里安装.只要在Window > Preferences > Code Composer Studio > Products
添加要SDK
的路径,就可以把相应的SDK
文件安装上来了.
导入官方CCS
示例工程
- 这里使用一个官方
Demo
来测试一下板子组件是否运行正常,ethernet_wifi_tcp_echo
它位于TIREX
的目录下/Software/SimpleLink SDK Plugins/Connectivity/SimpleLink SDK WiFi Plugin (2.40.00.22)/Examples/Development Tools/MSP432E401Y LaunchPad/Demos/ethernet_wifi_tcp_echo/
,很显然这里还需要安装SimpleLink SDK WiFi Plugin-2.40.00.22
版本的SDK
我这里选择是FreeRTOS
,所以还要指定FreeRTOS
的目录.
设置FreeRTOS
目录
- 如果工程中有用到
FreeRTOS
的但是又没有指定它的路径,会报下面的错误.1
2
3
4**** Build Finished ****
Buildfile generation error occurred..
Required variable 'FREERTOS_INSTALL_DIR'cannot be resolved or is pointing to a non-existent location.
See 'Preferences > CCS > Build > Variables' page to define this variable before building this project.
设置工程参数
- SysConfig
Syscfg
配置或查看,应该是属于类似STM32CubeMX
的工具,如果使用Syscfg
配置,就会根据配置的参数,在工程目录下自动生成Debug/syscfg/{Board.h,Board.c
文件,相当于把图行里配置参数自动生成代码,一般SimpleLink SDK
的示例工程都会带有Syscfg
支持,如果自建工程没有话,可以在工程目录新建一个后缀名为.syscfg
的文件,打开工程的Properties > Build > Sysconfig > Summary of falgs set:
加入下面设置:
1 | # 注意,SDK_DIR 是SDK的根目录绝对路径. |
,
IDE
识别后,会调用系统内的SysConfg
来向导编辑与配置.如果不喜欢此工具,也可以手动生成这样的板子定义文件.导入
ethernet_wifi_tcp_echo
到本地CCS
里后,要详细阅读ethernet_wifi_tcp_echo_MSP_EXP432E401Y_freertos_ccs/README.html
文档.下面是按照文档提示,需要修改network_if.h
里的SSID
与SECURITY_KEY
,也就是说要把它配置成可以连接到你周围的WIFI
.这下面是在工程里
main_freertos.c
添加一段测试FreeRTOS
创建多任务的示例.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35const char *pcTextForTask1 = "Task 1 is running\r\n";
const char *pcTextForTask2 = "Task 2 is running\r\n";
static void vTaskFunction(void *pvParameters)
{
char *pcTaskName;
pcTaskName = (char*)pvParameters;
for(;;)
{
printf("%s",pcTaskName);
vTaskDelay(250);
}
}
int main(void)
{
/* 此处代码省略 */
......
/* 创建测试任务*/
xTaskCreate(vTaskFunction,
"Task 1",
1000,
(void*)pcTextForTask1,
1,
NULL);
xTaskCreate(vTaskFunction,
"Task 2",
1000,
(void*)pcTextForTask2,
1,
NULL);
vTaskStartScheduler();
return (0);
}上述修改保存后,接上板子,按
F11
直接Debug
运行,如果无错,就会在IDE
下方的Console
窗口看到不断交错输出Task 2 is running
,Task 1 is running
信息.再打开另一个终端使用
minicom -o -b 115200 -D /dev/ttyACM0
打开会看到如下信息:
1 | [WLAN EVENT] STA Connected to the AP: lcy-y1s-2.4G , BSSID: 20:76:93:0:ac:8 |
- 按文档提示,用
putty
打开一个telnet
连接到192.168.1.115:1000
端口.就会显示如下:1
2WiFi: Creating thread clientfd = 1
wifi0: start clientfd = 0x1 - 在TI驱动程序库中,提供了两种编程模型来支持用户的程序开发:直接寄存器访问(DRA)模型和软件驱动程序(SD)模型.
CC3100BOOST无线WIFI模块
- TI CC3100: programming serial FLASH with a simple FTDI adapter
- cc3100-linux
- CC3100 & CC3200 FTDI Flashing
- cc3200tool
- CC3100&CC3200_UniFlash
- Texas Instruments MSP430F5529 LaunchPad + CC3100 SimpleLink™ Wi-Fi® BoosterPack using Energia
- micropython-cc3100
- 若要对
CC31XXBOOST
板进行编程,必须具备CC31XXEMUBOOST
板,这里使用USB-to-TTL
的板子来代替与它通信.原来看文档以为一定要使用FTDI
的芯片,买了一块FT232H
进行连接,不知道为什么不稳定,经常No ACK
.手上还有一块CP2102
的芯片用的很好.CC3100
芯片在后续的Uniflash v4
不提供支持的,最新支持的版本的是uniflash v3.4.1.00012,同时只支持i386
平台,经测试,安装在Debian 7 (i386)
能正常使用.
1 | CP2102 CC3100BOOST |
Format格式化SPI闪存
Serial Flash
型号Micron
公司的25PX80VP
是8Mb容量也就是1M
字节.Uniflashv3
先选择Format
格式化,下拉选择1M
.中间有提示--- please restart the device ---
,此时可以按下模块上的SW3
或者是SW2
按键一秒,按手册上来说,这本应是用一个GPIO
来自动触发它的.
查看文件系统
Format
完成之后,选择List Files System
,会在下方的Debug Console
里看到类似如下:.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28[07:12:41] INFO: setting break signal
[07:12:41] INFO: --- please restart the device --- # 要按SW2重启才能继续进行.
[07:12:43] INFO: connection succeeded
[07:12:43] INFO: getting storage list
[07:12:43] INFO: > Executing Operation: Init
[07:12:43] INFO: reading version info
[07:12:43] INFO: DEVICE CC3100 ES1.32
[07:12:43] INFO: reading version info
[07:12:45] INFO: > Executing Operation: ListFileSystem
[07:12:45] INFO: extracting file system information...
[07:12:45] INFO: Serial Flash block size: 4096 bytes
[07:12:45] INFO: Serial Flash capacity: 256 blocks
[07:12:45] INFO: file start size fail total size filename
[07:12:45] INFO: index block [BLKs] safe [BLKs]
[07:12:45] INFO: ----------------------------------------------------------------------------
[07:12:45] INFO: N/A 0 5 N/A 5 FATFS
[07:12:45] INFO:
[07:12:45] INFO: Flash usage
[07:12:45] INFO: -------------------------
[07:12:45] INFO: used space: 5 blocks
[07:12:45] INFO: free space: 251 blocks
[07:12:45] INFO: memory hole: [5-255]
[07:12:45] INFO: > Executing Operation: Disconnect
[07:12:46] Operation ListFileSystem returned.
烧入Service Pack Programming
- 这里的
Service Pack Programming
来自于CC3100SDK,现在最新(后面可能不更新了)SDK版本的1.3.0
,ServicePack
最新是1.0.1.14-2.12.2.8
,了解更多信息可以查看SDK内的各种文档说明.
1 | 07:16:07] INFO: --- please restart the device --- |
配置CC31xx/CC32xx Config Groups
- 这是配置模块的功能,功能比较多(Device Role,Station,AP,P2P,Profiles,HTTP Server,DHCP Server,mDNS Client,Smart Config),根据自己用途去配置.这里把设备角色(Device Role)选择成
Station
模式,勾选上Update
.勾选上Update
后,再打开主菜单Operation>Program
就会烧写一个/sys/mode.cfg
文件,
- 其它的要功能也是一样,记得要勾选上
Update
,才能更新到模块中,配置详情可以参考图文 CC3100&CC3200_UniFlash,编程技术手册swru368b.
1 | [07:32:39] Begin Program operation. |
CC3120BOOST
无线Wifi
模块
- CC3120BOOST: CC3120BOOST + MSP-EXP432E401Y
- CC3200 Info
- CC3120: Only UART Interface between CC3120 and MSP432E401Y
- CC3120MOD-UniFLASH-5-1-0-Timed-out-waiting-for-ack-
- TI CC3220SF Built From Scratch
- Zephyr CC3220SF LaunchXL
CC3120 BoosterPack™
插件模块(CC3120BOOST)
是一块可轻松连接到TI Launchpad
套件的电路板(为MSP-EXP432P401R
提供的软件示例);从而能够进行快速软件开发.CC3120BOOST
可插入到高级仿真BoosterPack(CC31xxEMUBOOST)
,还可连接到使用SimpleLink Studio
仿真MCU的PC.最后,此套件还可通过适配器板连接到除TI Launchpad
套件之外的任何低成本,低功耗MCU平台.- 根据
simplelink_sdk_wifi_plugin_2_40_00_22
文档说明,支持IPv4 and IPv6 TCP/IP Stack
,但是在实际应用中,发现无法连接到IPv6 Socket
,但是可以获取DHCPv6
的地址.查看了SDK源码发现了API的分层调用SlNetSock_connect > SlNetIfWifi_connect > sl_Connect
,打开源码发现如下:
1 | ~$ cat simplelink_sdk_wifi_plugin_2_40_00_22/source/ti/drivers/net/wifi/sl_socket.h |
下载第一个测试工程Network_termial
下面是是使用
Code Composer Stduio
导入simplelink_sdk_wifi_plugin_2_40_00_22/examples/rtos/MSP_EXP432E401Y/demos/network_terminal
,调试运行如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40~$ sudo minicom -o -b 115200 -D /dev/ttyACM0
Welcome to minicom 2.7.1
OPTIONS: I18n
Compiled on May 6 2018, 08:02:47.
Port /dev/ttyACM0, 15:41:53
Press CTRL-A Z for help on special keys
user:
============================================
Network Terminal Example Ver: 1.0.1.0
============================================
CHIP: 0x30000000
MAC: 2.0.0.0
PHY: 2.2.0.6
NWP: 3.10.0.5
ROM: 0
HOST: 3.0.1.46
MAC address: f0:c7:7f:18:1b:72
============================================
================================================================================
Available commands:
help scan setpolicy wlanconnect
wlan_ap_start wlan_ap_stop wlandisconnect connected_stations
ping send recv createfilter
enablefilter disablefilter deletefilter enablewowlan
mdnsadvertise mdnsquery radiotool p2pstart
p2pstop SoftRoamingEnable SoftRoamingDisable AntSelectionEnable
AntSelectionDisable CoexEnable CoexDisable Countrycode
clear
================================================================================
user:如上面所示,通过连接UART会得到
shell
接口,比如运行:scan -n 20
会扫描到周围的AP,wlan_ap_start
可以把模块切换成AP模式运行.具体支持的命令详细内容可以查看该工程内的README.html
文件.
Uniflash
v5
CC3120
相对于CC3100
主要是增加了security
和lower power
的性能,CC3120R
的模块如此,要对CC3X20BOOST
板进行编程,必须具备CC31XXEMUBOOST
板.它也可以用通过UART
接口对它进行ServerPack
更新.按照这里CC3120: Only UART Interface between CC3120 and MSP432E401Y指导是可以用MSP432E401Y
板载的XDS110
去烧写,接线方式如下:
1 | LauchPad XDS110 (J101) CC3120BOOST |
上述连接方式,成功连接过一次,后面测试时就无法连接成功一直超时,这个还不知道为什么.后面是使用一个
CP210x USB-UART
去连接的,使用模块上的USB PWR
对模块独立供电,模块上的J7(1-2)
短接.CP210x
与要模块接就只有三线:TX-RX,TX-RX,GND-GND
.同时使用UniFlash.desktop
打开的图形配置界面,无法指定端口.下面是使用dslite.sh
脚本去运行的.如下图所示,
SLImageCreator
是用python2
写的,并使用PyInstaller
把它编译成本的执行文件,从而避免了源码暴露.但是可以使用PyInstaller
的工具pyi-archive_viewer
把它解压还原回来.下面尝试把它的SLImageCreator
内容解压到本地文件SLImageCreator.py
.1
2
3
4
5
6
7
8
9
10
11
12
13
14~$ pyi-archive_viewer ../SLImageCreator
pos, length, uncompressed, iscompressed, type, name
[(0, 2410208, 2410208, 0, 'z', 'out00-PYZ.pyz'),
(2410208, 172, 237, 1, 'm', 'struct'),
(2410380, 1169, 2788, 1, 'm', 'pyimod01_os_path'),
(2411549, 3950, 11334, 1, 'm', 'pyimod02_archive'),
(2415499, 5629, 18438, 1, 'm', 'pyimod03_importers'),
(2421128, 2453, 6604, 1, 's', 'pyiboot01_bootstrap'),
(2423581, 437, 923, 1, 's', 'pyi_rth_pkgres'),
(2424018, 20959, 119615, 1, 's', 'SLImageCreator')]
? X
extract name? SLImageCreator # 选取 SLImageCreator
to filename? SLImageCreator.py
? Ctrl+D # 在当前目录下会有SLImageCreator.py文件.在
uniflash_5.0.0/simplelink/imagecreator/bin
里的libpython2.7.so.1.0
是引用系统库,再链接到本目录的.但运行是出现下面的错误.
1 | ti/uniflash_5.0.0/simplelink/imagecreator$ tree bin/ |
- 获取信息,下面的命令参考来自swru469g.pdf文档.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25uniflash_5.0.0$ ./dslite.sh --mode cc31xx device info --json --port /dev/ttyUSB0
Executing the following command:
> ./SLImageCreator device info --json --port /dev/ttyUSB0
For more details and examples, please refer to the UniFlash Quick Start guide.
Config file (cfg.json) doesn't exist, using defaults
INFO:root:COM PORT /dev/ttyUSB0
INFO:slbootloader.slbootloader:Connecting to device
INFO:slbootloader.slbootloader:--- Please power off the device ---
Press ENTER to continue
INFO:slbootloader.slbootloader:Power off
INFO:slbootloader.slbootloader:Set break signal
INFO:slbootloader.slbootloader:--- Please power on the device ---
INFO:slbootloader.slbootloader:Power on
INFO:slbootloader.slbootloader:Clear break signal
INFO:slbootloader.slbootloader:Connection succeeded
INFO:slbootloader.slbootloader:Received storage list
{
"mac_address": "f0:c7:7f:18:1b:72",
"hw_ver": 48,
"secure": true,
"device_type": "CC3120",
"prog_mac_address": null
}
GUI图形配置
1 | uniflash_5.0.0$ ./dslite.sh --mode cc31xx gui_cfg --port /dev/ttyUSB0 |
- 成功后转为后台进程,并用系统默认的浏览器打开一个网页,如下:
- 创建一个工程文件,如下:
- 连接模块,注意:点击
connect
后,要手动按一下模块上的SW3或SW2
复位它,才能连接到.
Simple
配置
- 如图所示,这
Uniflash v5
与Uniflash v3
的界面有很大不同,这个界面只有两个选项Start Role (Station,P2P,Access Point)
与Service Pack File Name
,
这里的Service Pack File Name
文件来自于simplelink_sdk_wifi_plugin_2_40_00_22/tools/cc31xx_tools/servicepack-cc3x20/sp_3.10.0.5_2.0.0.0_2.2.0.6.bin
,关于Service Pack
内容详情,可以查看SDK内的文档.
Anvanced配置
Genernal
- 注意,工程类型选成
Development
模式是不能随意更改MAC Address
的,会报错SL_ERROR_FS_DEVELOPMENT_BOARD_WRONG_MAC
.
System Setting
Files
- 使用
Online User Files
查看模块内的文件系统内容,如下:
SysConfig
简介
配置
它是一个独立工具安装包,可以把它安装在
$CCS_ROOT/ccs/utils/
下面.也可以安装到其它位置,创建一个链接到$CCS_ROOT/ccs/utils/sysconf
供CCS IDE
调用,工程根目录下的.syscfg
类型的文件会调用sysconfig
在CCS IDE
打开编辑,如果文件缺少必要的定义或者格式错误,SysConfig
会报错,并向导用户新建一个可用的配置.编译时,会先调用$CCS_ROOT/ccs/utils/sysconfig/sysconfig_cli.sh"
解析.syscfg
内容,会在(Debug|Release)目录创建syscfg
目录,会自动的生成ti_drivers_config.c,ti_drivers_config.h,ti_net_config.c
这些个文件.它的图形编辑界面如下:使用文本编辑器打开工程中的
.syscfg
格式如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46cat mqttclient_wifi.syscfg
/**
* These arguments were used when this file was generated. They will be automatically applied on subsequent loads
* via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
* @cliArgs --board "/ti/boards/MSP_EXP432E401Y" --product "simplelink_msp432e4_sdk@4.20.00.12"
* @versions {"data":"2020021217","timestamp":"2020021217","tool":"1.4.0+1234","templates":"2020021217"}
*/
const CC3120BOOST = scripting.addHardware("/ti/boards/boosterpacks/CC3120BOOST", "boosterpack2");
/**
* Import the modules used in this configuration.
*/
const Display = scripting.addModule("/ti/display/Display", {}, false);
const Display1 = Display.addInstance();
const GPIO = scripting.addModule("/ti/drivers/GPIO");
[...省略多行..]
const SlNet = scripting.addModule("/ti/net/SlNet", {}, false);
const SlNet1 = SlNet.addInstance();
/**
* Write custom configuration values to the imported modules.
*/
Display1.$hardware = system.deviceData.board.components.XDS110UART;
Display1.$name = "UART0";
Display1.uart.$name = "MSP_EXP432E401Y_UART0";
Display1.uart.uart.$name = "MyUART1";
GPIO3.$name = "MSP_EXP432E401Y_SDSPI_CS";
GPIO3.mode = "Output";
GPIO3.outputStrength = "High";
GPIO3.initialOutputState = "High";
GPIO3.gpioPin.$assign = "boosterpack.8";
GPIO4.$hardware = CC3120BOOST.components.CS;
GPIO4.$name = "MSP_EXP432E401Y_CS_pin";
GPIO4.initialOutputState = "High";
GPIO4.outputStrength = "High";
I2C1.$name = "MSP_EXP432E401Y_I2C2";
I2C1.i2c.$name = "MyI2C1";
I2C1.i2c.$assign = "I2C2";
I2C1.i2c.sdaPin.$assign = "boosterpack2.10";
I2C1.i2c.sclPin.$assign = "boosterpack2.9";
[....省略多行...]在最新工具版本中(1.4以上),
.syscfg
文件中必须要有@cliArgs --board "/ti/boards/MSP_EXP432E401Y"
,就是说必须要指定一个可用的--board
参数,否则会无法打开并编辑它.再来看一下文件中的@cliArgs --board "/ti/boards/MSP_EXP432E401Y" --product "simplelink_msp432e4_sdk@4.20.00.12"
这一行,它其实定义了这个Sysconfig
文件的类型定义的来源及解析方式.simplelink_msp432e4_sdk@4.20.00.12
是对应工程引用的SDK
的版本,打开SDK
的源码路径如下:
1 | # 注意SDK名与版本号. |
- 如上所示,
SysConfig
工具定义的出厂资源描述文件是位于$SDK/source/ti/boards/.meta
下,而且它是有分层定义设计的,MSP_EXP432E401Y.syscfg.json
是板子定义.components
是一些外设模块的定义.boosterpacks
是一些可扩展组件的定义,它定义管脚与规格是支持MSP_EXP432E401Y
扩展的.
自定义资源文件
下面是参照了官方源码,在
boosterpacks
中定义了CC3120BOOST
.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98cat boosterpacks/CC3120BOOST.syscfg.json
/*
* ======== CC3120BOOST.syscfg.json ========
* 这里是对照MSP-EXP432E401Y Rev 1.0 BoosterPack II 管脚定义的. 对照 SWRU457A PDF文档
* CC3120 SimpleLinkTM Wi-Fi ® BoosterPackTM Plug-InModule and IoT Solution
* 排针顺序查看官方 MSP_EXP432E401Y_CC3120BOOST.syscfg.json里的BoosterPack Standard Header #2 部分
*/
{
"name": "CC3120BOOST",
"displayName": "CC3120BOOST",
"description": "CC3120BOOST Wifi BoosterPack II",
"longDescription": "The [__CC3120BOOST__](https://www.ti.com/tool/CC3120BOOST) BoosterPack™ SimpleLink™ Wi-Fi® CC3120 wireless network processor BoosterPack™ plug-in module ",
"headerType": "BoosterPack 40 pin",
"components": {
"CC3120BOOST_SPI": {
"displayName": "CC3120BOOST SPI Bus",
"description": "CC3120BOOST SPI bus",
"longDescription": "CC3120BOOST SPI bus",
"type": "SPI_BUS",
"signals" : {
/* PQ0: BoosterPack standard: SPI CLK */
"SCLK" : {"type": "SPI_SCLK", "connection" : 7},
/* PQ1: BoosterPack standard: SPI FSS */
"SS" : {"type": "SPI_SS", "connection" : 12},
/* PQ2: BoosterPack standard: SPI MOSI */
"MOSI" : {"type": "SPI_MOSI", "connection" : 15},
/* PQ3: BoosterPack standard: SPI MISO */
"MISO" : {"type": "SPI_MISO", "connection" : 14}
}
},
"CC3120BOOST_UART": {
"definition": "/ti/boards/components/uart.json",
"connections": {
"RXD": 4, /* PP1 */
"TXD": 3 /* PP0 */
}
},
"IRQ": {
"displayName": "IRQ",
/* "definition": "/ti/boards/components/digitalInput.json",*/
/* PM7 这里要注手册说明这里是OUT,对应于MSP432E401Y的管脚就是IN,所以这里是INPUT,下同. */
"signals": {
"INTERRUPT": {
"type": "DIN",
"settings": {
"pull": "None"
},
"connection": 19
}
}
},
"CS": {
"displayName": "CS",
"definition": "/ti/boards/components/digitalOutput.json",
/* PP5 */
"connections": { "OUTPUT" : 18 }
},
"nHIB": {
"displayName": "nHIB",
"description": "nHIB power pin",
"longDescription": "nHIB power pin",
"definition": "/ti/boards/components/digitalOutput.json",
/* *RX */
"connections": { "OUTPUT" : 5 }
},
"nRESET": {
"displayName": "nRESET",
"definition": "/ti/boards/components/digitalOutput.json",
/* RST */
"connections": { "OUTPUT" : 16 }
},
"NWP_LOG_TX": {
"displayName": "NWP_LOG_TX",
"definition": "/ti/boards/components/digitalInput.json",
/* PH0 */
"connections": { "INPUT" : 34 },
"settings": {
"DIN": {
"pull": "Pull Up",
"interruptTrigger": "Raising Edge"
}
}
},
"WLAN_LOG_TX": {
"displayName": "WLAN_LOG_TX",
"definition": "/ti/boards/components/digitalInput.json",
/* PH1 */
"connections": { "INPUT" : 33 },
"settings": {
"DIN": {
"pull": "Pull Up",
"interruptTrigger": "Raising Edge"
}
}
}
}
}在工程目录内的
.syscfg
文件里加上const CC3120BOOST = scripting.addHardware("/ti/boards/boosterpacks/CC3120BOOST","boosterpack2");
这一行,打开SysConfig
编辑界面如下:如上图所示,这里还自定义一个板子的定义,就是在
/ti/boards/MSP_EXP432E401Y
基础上删除了MICROUSB
定义,命名为/ti/boards/MSP_EXP432E401Y_WITHOUT_USB
,但是自定义的CC3120BOOST
文件还是不能添加nRESET,nHIB
这两个管脚,还是与板子的定义有冲突,这也可能是为什么官方不出一个boosterpacks/CC3120BOOST
的组件.
1 | "MICROUSB": { |
CC2650 Module BoosterPack
蓝牙模块
烧写蓝牙固件
Windows
端可以使用SmartRF FlashProgrammer2
来烧写,但是需要一根标准JTAG
线,且要把MSP432E4 LaunchPad
上的J101
跳线TDI,TDO,TCK,TMS,RST
去掉,只留GND,3V3
这两根跳线,使用标准的10pin JTAG
线从J102
连接XDS-110 JTAG
调试信号,具体操作如下图所示.Linux
端使用UniFlash
命令行来烧写,UniFlash
本身是一个GUI烧写的工具,在选择目标设备有两种:On-chip
是透过JTAG
烧写,Serial
是通过serial bootloader
烧写.但是我在实际中用On-Chip
烧写失败,用命令行烧写是显示成功的.接线与跳线部分还是上图那样,先要用UniFlash
生成一个ccxml
配置文件,具体如下图,点击Start
后,按上方的download.ccxml
保存到文件夹内.
1 | ./dslite.sh -c ~/CC2650F128.ccxml --list-device-cmds |
- 参数解释,具体更详细的参数说明,
dslite.sh --help
.- -c 指定ccxml配置文件的位置.
- -e 详细显示模式
- -f 烧写文件,这个固件文件可以在
simplelink_sdk_ble_plugin_3_20_00_24
官方的SDK里面. - -v 烧写完成后,校验烧写文件.
单片机入门
- 时钟周期
- 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12us),是计算机中最基本的、最小的时间单位,也称节拍脉冲或T周期.在一个时钟周期内,CPU仅完成一个最基本的动作.对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;1秒(s)等于1000毫秒(ms),等于1000000微秒(us).
- 1秒(s) = 1000毫秒(ms)
1毫秒(ms) = 1000微秒(us)
1微秒(us) = 1000纳秒(ns)
1纳秒(ns) = 1000皮秒(ps) - 在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示).
- 机器周期
- 在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作.例如:取指令、读存储器、写存储器等,这每一项工作称为一个基本操作.完成一个基本操作所需要的时间称为机器周期.一般情况下,一个机器周期由若干个S周期(状态周期)组成.
8051
系列单片机的一个机器周期同6个S周期(状态周期)组成.前面已经说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051
单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期.
- 在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作.例如:取指令、读存储器、写存储器等,这每一项工作称为一个基本操作.完成一个基本操作所需要的时间称为机器周期.一般情况下,一个机器周期由若干个S周期(状态周期)组成.
- 指令周期
- 指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成.指令不同,所需的机器周期数也不同.对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期.对于一些比较复杂的指令,例如:转移指令、乘法指令,则需要两个或者两个以上的机器周期.
字节顺序
- 对于单一的字节(a byte),大部分处理器以相同的顺序处理位元(bit),因此单字节的存放方法和传输方式一般相同.
位序
对于多字节数据,如整数(32位机中一般占4字节),在不同的处理器的存放方式主要有两种,以内存中0x0A0B0C0D的存放方式为例,分别有以下几种方式
大端(Big-Endian)
- 高位字节存储在低位内存地址,低位字节存储在高位内存地址
- 如:地址方向是左低右高,数据以8bit为单位时:
0x0A0B0C0D
,数据以16bit为单位时:0x0A0B0C0D
- 网络传输一般采用大端序,也被称之为网络字节序,或网络序.IP协议中定义大端序为网络字节序.
- 先传高位(MSB)的串行协议:
- I2C
- SPI
- 摩尔斯电码
小端(Little-Endian)
- 低位字节存储在低位内存地址,高位字节存储在高位内存地址.
- 如:地址方向是左低右高,数据以8bit为单位时:
0x0D0C0B0A
,数据以16bit为单位时:0x0C0D0A0B
. - 先传低位(LSB)的串行协议:
- RS-232
- RS-422
- RS-485
- USB
- 以太网(虽然高字节先传,但每一字节内低位先传)
最高有效位MSB(the most significant bit)
- 指多字节序列中具有最大权重的字节.在大端序中,msb即指最左端的位.对于有符号二进制数,负数采用反码或补码形式,此时msb用来表示符号,
msb
为1表示负数,0表示正数.
- 指多字节序列中具有最大权重的字节.在大端序中,msb即指最左端的位.对于有符号二进制数,负数采用反码或补码形式,此时msb用来表示符号,
最低有效位LSB(the least significant bit)
- 指多字节序列中最小权重的字节,是指一个二进制数字中的第0位(即最低位),权值为2^0,可以用它来检测数的奇偶性.与之相反的称之为最高有效位.在大端序中,
lsb
指最右边的位.
- 指多字节序列中最小权重的字节,是指一个二进制数字中的第0位(即最低位),权值为2^0,可以用它来检测数的奇偶性.与之相反的称之为最高有效位.在大端序中,
不同编码的字节顺序标
编码 表标(16进制) UTF-16(大端序) FE FF UTF-16(小端序) FF FE UTF-32(大端序) 00 00 FE FF UTF-32(小端序) FF FE 00 00
安装自己的Mosquitto
服务器
- 开启简单用户认证
1
2
3
4
5// 创建文件,并添加一个用户.
~$ sudo mosquitto_passwd -c /etc/mosquitto/passwd sammy
// 添加一个用户
~$ sudo mosquitto_passwd /etc/mosquitto/passwd user2
发行版安装
1 | ~$ sudo apt-get install mosquitto -y |
- 配置
websockets
,需要用的证书文件.
1 | ~# ln -svf /etc/letsencrypt/live/<domain>/privkey.pem /etc/mosquitto/certs/privkey.pem |
客户端测试
1 | ~$ mosquitto_sub -h 192.168.1.178 -u test -P test123 -t /lcy/cc3120/sw2 |
1 | ~$ mosquitto_pub -h 192.168.1.178 -u test -P test123 -t /lcy/cc3120/sw2 -m 0 |
源码安装
- 如果要尝试新功能,可以如下操作.
1
2
3
4
5
6~$ apt-get install cmake libwebsockets-dev libwebsockets8 libc-ares-dev uthash-dev -y
~$ git clone https://github.com/eclipse/mosquitto
~$ mkdir -pv mosquitto/build && cd mosquitto/build
~$ cmake -DWITH_SRV=yes -DWITH_WEBSOCKETS=yes -DWITH_THREADING=yes -DWITH_TLS=yes -DWITH_DOCS=no ../
~$ make WITH_SRV=yes WITH_WEBSOCKETS=yes WITH_TLS=yes WITH_DOCS=no -j4
~$ make install/local
调试程序跑飞的原因
在开发嵌入式系统程序时,会碰到各种无理头的问题,最严重是它跑飞了,直接进了
faultISR(void)
里去while
.不知道是那里出错了,首先在faultISR(void)
函数开始处下一个断点,这里是通过目标map
文件找到该文件的指针地址,进入到工程编译成后的Debug
内,打开xxx.map
,文本搜寻faultISR
, 如下图所示,faultISR
在.text
段内的0x00041724
的位置.在
CCS IDE
的调试状态下,打开CCS Debug > Disassembly
,输入0x00041724
搜索,设置断点.再重新运行一次调试.此时程序跑飞后停在了
faultISR(void)
处,再根据系统内在各种寄存器来定位出错的位置.如上图所示,在
CCS Debug > Registers > Core Registers
内会看到PC,SP,LR
三个寄存器名,关于寄存器的技术细节一定要参照《Cortex M3与M4权威指南》这本手册书去理解,还有MSP432E401Y SimpleLink™ User Guide.pdf的手册.这里如果显示LR
内value
是一个非法无效的值如: 0xFFFFFFFE,就参考SP
的值,把SP
内的值输入到CCS Debug > Memory Browser
内.如上图所示,从
0x2003FFE0
开始每4个字节对应一个寄存器,它们依次是R0,R1,R2,R3,R12,LR,PC,XPSR
,先用工具链内的objdump
把目标烧写文件反汇编到一个文本文件:
1 | ~$ ./ccs920/ccs/tools/compiler/ti-cgt-arm_18.12.6.LTS/bin/arm-none-eabi-objdump -d xxxxxx.out > ~/mps432-debug.txt |
- 如上图所示,按顺序查看到
LR
的值是0x00031A01
,打开msp432-debug.txt
,查找31a00
,就会找到对应出错的函数位置.
EXC_RETURN Value | Mode to Return To | Stack to use |
---|---|---|
0xFFFFFFF1 | Handler Mode | MSP |
0xFFFFFFF9 | Thread Mode | MSP |
0xFFFFFFFD | Thread Mode | PSP |
0xFFFFFFE1 | Handler Mode (FPU Extended Frame) | MSP |
0xFFFFFFE9 | Thread Mode (FPU Extended Frame) | MSP |
0xFFFFFFED | Thread Mode (FPU Extended Frame) | PSP |
调试Bus Fault
- 当中断在
faultISR
时,查看到NVIC
里的寄存器的值如上图所示,这里NVIC Fault Status (NVIC_FAULT_STAT)
的值是0x00008200
这里代表它是一个Usage Fault
,再展开显示详情Divide-by-Zero Usage Fault
.,参考来源《Cortex M3与M4权威指南》第七章,7.4 “优先级定义”,表7.5, 还有参考MSP432E401Y SimpleLink™ User Guide.pdf,1.5小节《内存模型》表1-15 Memory Map
. - 在这里
NVIC Fault Address (NVIC_FAULT_ADDR)
的值显示是0x2004.0014
,参考表1-15 Memory Map
它出错是在SRAM
里.假如是:0x4003.100C
表示出错在Timer1
这个硬件地址,是一个Bus Fault
,它的出错主要原因的:程序去访问了没有使能的外设,需要先使能,再访问. objectdump
出错.1
2~$ ./ccs920/ccs/tools/compiler/ti-cgt-arm_18.12.6.LTS/bin/arm-none-eabi-objdump --help
arm-none-eabi-objdump: loadlocale.c:129: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.- 设置
LANG
环境变量.export LANG=/usr/lib/locale/en_US
,再次运行正常.
Energia
- Installing the LaunchPad drivers
- Energia是一个开源和社区驱动型集成开发环境(IDE)与软件框架与Arduino的设计理念是一样的.
Energia
基于接线框架,为微控
制器编程提供了直观的编码环境和由易于使用的功能API及库构成的可靠框架.Energia
支持多种 TI 处理器,主要包括可从LaunchPad
开发生态系统获得的处理
器.Energia
是开源产品,源代码可从github获得. - 总体来说,
Energia
是从Arduino
分支出来,但是支持的库不是很多,而且最新的版本是2019
出的,后续版本好像没有看到.
1 | ~$ cat /etc/udev/rules.d/71-ti-permissions.rules |
谢谢支持
- 微信二维码:
- 联系作者
