-
Notifications
You must be signed in to change notification settings - Fork 0
/
ti-cc3220.html
615 lines (565 loc) · 22.5 KB
/
ti-cc3220.html
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>TI CC3220 — m0v</title>
<link rel="stylesheet" type="text/css" href="/theme/css/skeleton.css" />
<link rel="stylesheet" type="text/css" href="/theme/css/main.css" />
<link rel="shortcut icon" type="text/css" href="/favicon.ico" />
<link rel="alternate" type="application/atom+xml"
title="m0v — Flux Atom"
href="/" />
<!--[if lte IE 8]><script src="/theme/js/html5shiv.js"></script><![endif]-->
<meta name="viewport" content="initial-scale=1.0, width=device-width, user-scalable=no" />
<meta name="author" content="RCS" />
<meta name="keywords" content="hardware, software, tronix" />
</head>
<body>
<div class="page">
<header class="page-head">
<h1>
<a href="/index.html">m0v</a>
</h1>
</header>
<div class="page-content">
<article class="post content">
<header class="post-header">
<time datetime="2017-11-03T00:00:00+00:00" pubdate="pubdate">
Fri 03 November 2017
</time>
<h1>
<a rel="bookmark"
href="/ti-cc3220.html"
title="Lien permanent vers «TI CC3220»">
TI CC3220
</a>
</h1>
<div class="meta">
In «<a href="/category/manual.html">manual</a>»
by <a href="/author/rcs.html">RCS</a>
</div>
</header>
<div class="post-content">
<h2>Contents</h2>
<ul>
<li><a href="#brief">Brief</a><ul>
<li><a href="#ootb">OOTB</a></li>
<li><a href="#err">Errata</a></li>
</ul>
</li>
<li><a href="#brief">Download</a></li>
<li><a href="#components">Components</a><ul>
<li><a href="#empty">Empty</a></li>
<li><a href="#mov">MOV</a></li>
<li><a href="#adc">ADC</a></li>
<li><a href="#networking">Networking</a><ul>
<li><a href="#wifi">Wifi</a></li>
<li><a href="#sntp">sntp</a></li>
</ul>
</li>
<li><a href="#modbus">Modbus</a></li>
</ul>
</li>
<li><a href="#minicom">Minicom</a></li>
<li><a href="#uniflash">Uniflash</a></li>
<li><a href="#power">Power</a></li>
<li><a href="#layout">Layout</a></li>
<li><a href="#gotchas">Gotchas</a></li>
<li><a href="#todo">Todo</a></li>
<li><a href="#references">References</a></li>
</ul>
<h2><a href="#brief" id="brief">Brief</a></h2>
<p><code>TI_RTOS</code> is bundled in <code>Simplelink SDK</code>. No need to download separately.</p>
<h3><a href="#ootb" id="ootb">OOTB</a></h3>
<p>swru473.pdf</p>
<h3><a href="#errata" id="errata">Errata</a></h3>
<p>6.1.1 Provisioning: Provisioning mode is reflected by a flashing red LED (D10, not D7).
6.1.2 CC3220 as AP: AP mode is applied by pressing the SW3 (not SW2) switch on the CC3220 Launchpad.</p>
<h2><a href="#download" id="download">Download</a></h2>
<ul>
<li><a href="">Simplelink SDK</a> </li>
<li><a href="">Uniflash</a></li>
<li><a href="">CCStudio</a></li>
</ul>
<h2><a href="#components" id="components">Components</a></h2>
<h3><a href="#empty" id="empty">Empty</a></h3>
<p>Provisioning using external confirmation/feedback</p>
<p>From swru455g (16.8.1):</p>
<p>To use a cloud-based feedback, the external confirmation bit should be set in the provisioning host command flags parameter when the provisioning process is started.</p>
<div class="highlight"><pre><span></span>sl_WlanProvisioning(SL_WLAN_PROVISIONING_CMD_START_MODE_APSC, ROLE_AP, 600, NULL, SL_WLAN_PROVISIONING_CMD_FLAG_EXTERNAL_CONFIRMATION);
</pre></div>
<p>Can only use the above with <code>ROLE_STA</code> as second argument because it needs to be in station mode and connect to an external server to confirm connection. </p>
<h3><a href="#provisioning" id="provisioning">Provisioning</a></h3>
<p>Each of 7 states has 12 event handlers (function pointers) and corresponding next state defined by lookup/transition table <code>const Provisioning_TableEntry_t gTransitionTable[7][12]</code> </p>
<p>7 AppState(s): </p>
<div class="highlight"><pre><span></span>0 STARTING
1 WAITING_FOR_CONNECTION
2 WAIT_FOR_IP
3 PINGING_GW
4 PROVISIONING_IN_PROGRESS
5 PROVISIONING_WAIT_COMPLETE
6 ERROR
7 MAX
</pre></div>
<p>12 AppEvent(s):</p>
<div class="highlight"><pre><span></span>0 STARTED
1 CONNECTED
2 IP_ACQUIRED
3 DISCONNECT
4 PING_COMPLETE
5 PROVISIONING_STARTED
6 PROVISIONING_SUCCESS
7 PROVISIONING_STOPPED
8 PROVISIONING_WAIT_CONN
9 TIMEOUT
10 ERROR
11 RESTART
12 MAX
</pre></div>
<p>17 event handlers (function pointers) of the form: </p>
<div class="highlight"><pre><span></span>typedef int32_t (*fptr_EventHandler)(void);
</pre></div>
<p>For instance: </p>
<div class="highlight"><pre><span></span>int32_t StartConnection(void); // SC
int32_t HandleWaitForIp(void); // HWI
int32_t ProvisioningStartRequest(void); // PS
int32_t ProvisioningRestartRequest(void); // PRR
int32_t ReportError(void); // RE
int32_t DoNothing(void); // DN
int32_t CheckLanConnection(void); // CLC
int32_t CheckInternetConnection(void); // CIC
int32_t HandleProvisioningComplete(void); // HPC
int32_t HandleProvisioningTimeout(void); // HPT
int32_t HandleUserApplication(void); // HUA
int32_t SendPingToGW(void); // SPG
</pre></div>
<table>
<thead>
<tr>
<th>State/Event</th>
<th>0</th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
<th>9</th>
<th>10</th>
<th>11</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>SC->1</td>
<td>HWI->2</td>
<td>RE->6</td>
<td>RE->6</td>
<td>RE->6</td>
<td>RE->6</td>
<td>RE->6</td>
<td>RE->6</td>
<td>RE->6</td>
<td>RE->6</td>
<td>RE->6</td>
<td>PS->4</td>
</tr>
<tr>
<td>1</td>
<td>SC->1</td>
<td>HWI->2</td>
<td>RE->6</td>
<td>SC->1</td>
<td>HPC->3</td>
<td>PS->4</td>
<td>DN->1</td>
<td>CLC->1</td>
<td>DN->1</td>
<td>PS->4</td>
<td>PS->4</td>
<td>PRR->1</td>
</tr>
<tr>
<td>2</td>
<td>PS->4</td>
<td>RE->6</td>
<td>CLC->3</td>
<td>SC->1</td>
<td>DN->2</td>
<td>PS->4</td>
<td>DN->2</td>
<td>HPC->3</td>
<td>DN->2</td>
<td>RE->6</td>
<td>RE->6</td>
<td>PRR->1</td>
</tr>
<tr>
<td>3</td>
<td>DN->3</td>
<td>HWI->2</td>
<td>CIC->3</td>
<td>HD->1</td>
<td>DN->3</td>
<td>PS->4</td>
<td>DN->3</td>
<td>HUA->3</td>
<td>DN->3</td>
<td>SPG->3</td>
<td>RE->6</td>
<td>PRR->1</td>
</tr>
<tr>
<td>4</td>
<td>PSR->4</td>
<td>HC->4</td>
<td>CIC->4</td>
<td>HD->4</td>
<td>DN->4</td>
<td>DN->4</td>
<td>HPC->5</td>
<td>HPC->3</td>
<td>DN->1</td>
<td>PRR->1</td>
<td>RE->6</td>
<td>PRR->1</td>
</tr>
<tr>
<td>5</td>
<td>DN->5</td>
<td>DN-->5</td>
<td>DN->5</td>
<td>HD->5</td>
<td>DN->5</td>
<td>DN->5</td>
<td>DN->5</td>
<td>HUA->3</td>
<td>DN->1</td>
<td>HPT->5</td>
<td>RE->6</td>
<td>PRR->5</td>
</tr>
<tr>
<td>6</td>
<td>RE->1</td>
<td>RE-->1</td>
<td>RE->1</td>
<td>RE->1</td>
<td>RE->1</td>
<td>RE->1</td>
<td>RE->1</td>
<td>RE->1</td>
<td>RE->1</td>
<td>RE->1</td>
<td>RE->1</td>
<td>PS->1</td>
</tr>
</tbody>
</table>
<div class="highlight"><pre><span></span>S0->E0->SC->S1
S1->E1->HWI->S2
S2->E2->CLC->S3->E7(from CLC)->HUA->3
OR
S2->E7->HPC->S3
S3->E9->SPG->S3->E9 ... repeat
</pre></div>
<p>4 thread are created:</p>
<div class="highlight"><pre><span></span>RetVal = pthread_create(&gSpawnThread, &pAttrs_spawn, sl_Task, NULL);
RetVal = pthread_create(&gProvisioningThread, &pAttrs, ProvisioningTask, NULL);
RetVal = pthread_create(&gDisplayThread, &pAttrs_display, UpdateLedDisplay, NULL);
RetVal = pthread_create(&gAdcThread, &pAttrs_adc, adcThread, NULL);
</pre></div>
<p>The <code>ProvioningTask</code> thread creates a message queue <code>gProvisioningSMQueue</code> and receives from this queue:</p>
<div class="highlight"><pre><span></span>gProvisioningSMQueue = mq_open("SMQueue", O_CREAT, 0, &attr);
...
while(1) {
mq_receive(gProvisioningSMQueue, (char *)&event, 1, NULL);
...
}
</pre></div>
<p>The SL event handlers <code>SimpleLinkWlanEventHandler/SimpleLinkNetAppEventHandler</code> and the application event handlers send to this queue using function <code>SignalEvent</code>. </p>
<div class="highlight"><pre><span></span>int16_t SignalEvent(AppEvent event) {
...
mq_send(gProvisioningSMQueue, &msg, 1, 0);
...
}
</pre></div>
<p>Both <code>ProvisioningTask & adcThread</code> create timers using sigevent.</p>
<p>The <code>adcThread</code> also blocks on a semaphore which gets posted to when the timer expires.</p>
<h3><a href="#mov" id="mov">MOV</a></h3>
<p>The SPD that the CC3220S will connect has a mechanical relay that gets triggered when the thermal fuse burns out. So the normally open (NO) becomes closed and the normally closed (NC) becomes open. </p>
<p>A simple continuity check circuit is used to check the state of NO. When the thermal fuse hasn't burned out, the transistor doesn't conduct (as theres no base current as the circuit is open) and the comparator ouputs low as its inverting input is lower. </p>
<p>When the thermal fuse burns out and NO is now closed, the transistor conducts and the comparator ouputs high as its inverting input is higher. </p>
<p>The output of the comparator can be fed to either the ADC or GPIO of the CC3220S. </p>
<h3><a href="#adc" id="adc">ADC</a></h3>
<p>ADC1 = pin 60</p>
<h3><a href="#networking" id="networking">Networking</a></h3>
<h4><a href="#wifi" id="wifi">Wifi</a></h4>
<p>When starting with the <code>empty</code> project and adding in Simplelink, add the <code>Library Path</code> and library<code>ccs/rtos/simplelink.a</code> in the project properties in C/C++ General -> Paths and Symbols. </p>
<p>Then implement all the required callback functions (<code>SimpleLinkNetAppRequestMemFreeEventHandler</code>, <code>SimpleLinkNetAppRequestEventHandler</code>, <code>SimpleLinkWlanEventHandler</code>, <code>SimpleLinkGeneralEventHandler</code>, etc. etc.).</p>
<p>The host controls ths provisioning process using one command: </p>
<div class="highlight"><pre><span></span>_i16 sl_WlanProvisioning(_u8 ProvisioningCmd, _u8 RequestedRoleAfterSuccess, _u16 InactivityTimeoutSec, char *pSmartConfigKey, _u32 Flags);
</pre></div>
<p>RequestedRoleAfterSucess: The desired role (AP or STA) to which the device should switch if provisioning is successful (relevant only if the value of the ProvisioningCmd is 0, 1, 2, or 3).</p>
<p>InactivityTimeoutSec: Defines the period of time (in seconds) the system waits before it automatically stops the provisioning process when no user activity is detected. Relevant only if the value of the
ProvisioningCmd command is 0, 1, 2, or 3.</p>
<p>Flags: Optional configuration conducted by a bitmap.</p>
<table>
<thead>
<tr>
<th align="center">Command</th>
<th align="center">Value</th>
<th align="center">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">BIT_0</td>
<td align="center">ENABLE_EXTERNAL_CONFIRMATION</td>
<td align="center">Defines whether to use external confirmation or not. Relevant only</td>
</tr>
<tr>
<td align="center"></td>
<td align="center"></td>
<td align="center">if the value of the ProvisioningCmd command is 0, 1, 2, or 3.</td>
</tr>
</tbody>
</table>
<p>Example usage: <code>retVal = sl_WlanProvisioning(provisioningCmd, ROLE_STA, PROVISIONING_INACTIVITY_TIMEOUT, NULL, SL_WLAN_PROVISIONING_CMD_FLAG_EXTERNAL_CONFIRMATION)</code></p>
<h4><a href="#sntp" id="sntp">sntp</a></h4>
<p>As per the problem related in [sntp], the service pack needs to be included while using Uniflash to flash the image otherwise a -202 (sntp module error) is encountered.</p>
<p>Network time issue fixed in 94fb658</p>
<div class="highlight"><pre><span></span>struct tm netTime;
...
status = ClockSync_get(&netTime); // tm's months run from 0->11
SlDateTime_t dateTime = {0};
...
dateTime.tm_mon = netTime.tm_mon + 1; // but SlDateTime's months run from 1->12
</pre></div>
<h3><a href="#modbus" id="modbus">Modbus</a></h3>
<p>Arm compiler at:</p>
<div class="highlight"><pre><span></span>~/ti/ccsv8/ccsv8/tools/compiler/ti-cgt-arm_18.1.7.LTS/bin
</pre></div>
<h2>minicom</h2>
<p>minicom -b 115200 -8 -D /dev/ttyACM0</p>
<p>To run minicom as a non-root user, user has to be part of dialout group. </p>
<p>Also for CC3200, user has to be added to plugdev group. </p>
<h2>openocd</h2>
<p>cd ~/ti/cc3200_sdk_1_3_0/CC3200SDK_1.3.0/cc3200-sdk/tools/gcc_scripts
openocd -f cc3200.cfg</p>
<p>Open On-Chip Debugger 0.9.0 (2015-09-02-10:42)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
adapter speed: 1000 kHz
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
cc3200_dbginit
Info : clock speed 1000 kHz
Info : JTAG tap: cc3200.jrc tap/device found: 0x0b97c02f (mfg: 0x017, part: 0xb97c, ver: 0x0)
Info : JTAG tap: cc3200.dap enabled
Info : cc3200.cpu: hardware has 6 breakpoints, 4 watchpoints</p>
<h2>cc3200</h2>
<p>cc3200_sdk_1_3_0/CC3200SDK_1.3.0/tools/gcc_scripts/makedefs_ti_rtos
cc3200_sdk_1_3_0/CC3200SDK_1.3.0/ti_rtos/ti_rtos_config/gcc/configPkg/compiler.opt
cc3200_sdk_1_3_0/CC3200SDK_1.3.0/oslib/gcc/Makefile_oslib_tirtos</p>
<p>malloc (nbytes=76) at ../../../../../../newlib/libc/stdlib/malloc.c:215
215 ../../../../../../newlib/libc/stdlib/malloc.c: No such file or directory.</p>
<h2>Uniflash</h2>
<ul>
<li><a href="http://www.ti.com/tool/Uniflash">Product page</a></li>
<li><a href="http://processors.wiki.ti.com/index.php/Category:CCS_UniFlash">Download</a></li>
</ul>
<p>Install as root:</p>
<div class="highlight"><pre><span></span>sudo ./uniflash_sl.4.6.0.2176.run // install to /opt/ti
</pre></div>
<p>Start Uniflash:</p>
<div class="highlight"><pre><span></span>cd /opt/ti/uniflash_4.6.0
sudo ./node-webkit/nw
</pre></div>
<h3>Uniflash Gotchas</h3>
<p>In client mode (<code>TCPClient</code> in <code>socket_cmd.c</code>) if verifying server certificate like so:</p>
<div class="highlight"><pre><span></span>sl_SetSockOpt(sock,SL_SOL_SOCKET,SL_SO_SECURE_FILES_CA_FILE_NAME, ROOT_CA_CERT_FILE, strlen(ROOT_CA_CERT_FILE));
</pre></div>
<p>then may run into the following error: 688: <code>SL_ERROR_BSD_ESEC_ASN_NO_SIGNER_E</code></p>
<p>To work around, remove the server cert verification and receive this error (warning) instead: 453: <code>SL_ERROR_BSD_ESECSNOVERIFY</code></p>
<p>Timestamp issue with CC32XX: the following code doesn't work on CC32XX because of missing time.h implementations.</p>
<div class="highlight"><pre><span></span>time_t rawtime;
struct tm * timeinfo;
time(&rawtime); // time(NULL);
rawtime = mktime(timeinfo);
</pre></div>
<h3><a href="#networking" id="networking">Networking</a></h3>
<ul>
<li>source/ti/driver/net/wifi/errors.h</li>
</ul>
<h2>TIRTOS</h2>
<p>~/ti/tirtos_simplelink_2_13_01_09</p>
<p>Corresponding xdctools installed at:
~/ti/xdctools_3_31_01_33_core</p>
<p>This can be found by checking the install log which strangely has Windows paths:
./tirtossimplelink_2_13_01_09_install.log:Unpacking C:\ti\xdctools_3_31_01_33_core\jre\bin\dtplugin\deployJava1.dll</p>
<p>TIRTOS can be rebuit after changing Windows paths to Linux paths in tirtos.mak:
../xdctools_3_31_01_33_core/gmake -f tirtos.mak all</p>
<p>Also can choose compiler/linker options (CCS, GCC or IAR) in tirtos.mak</p>
<h2>Demos</h2>
<p>wlanconnect -s "M0V" -t WPA/WPA2 -p "53606808"
send -c 192.168.1.100 -n 1</p>
<h2>OOB</h2>
<p>provisioningTask
linkLocalTask:
controlTask: handles button presses etc.
otaTask</p>
<h2>Drivers</h2>
<h3>GPIO</h3>
<h3>PWM</h3>
<p>System clock 80MHz
Timer tick = 1/80Mhz = 12.5ns
16 bit registers + 8 bit prescalar
Maximum tick = 2^24-1 = 16777215
Max time = (2^24-1) x 12.5ns = 0.209715s</p>
<h3>I2C</h3>
<p>Standard bus frequencies are 100/400KHz</p>
<h2>BIOS Kernel</h2>
<h2><a href="#power" id="power">Power</a></h2>
<p>The board can be powered from an external power supply (i.e. not USB) using the instructions in section 2.5.2 in SWRU463.pdf (Simplelink CC3220 Wi-Fi LaunchPad Development Kit Hardware). </p>
<ol>
<li>Remove the USB cable.</li>
<li>Plug in the battery pack on J20 with the correct polarity.</li>
<li>Connect the jumper across J12 and J13.</li>
</ol>
<p>The UART can still be used via USB to monitor output from the board even though the USB is not providing the power to the board. </p>
<h2><a href="#layout" id="layout">Layout</a></h2>
<p>The following GPIO ports were left unconnected due to space constraints on board:</p>
<div class="highlight"><pre><span></span>P05_GPIO_14
P06_GPIO_15
P07_GPIO_16
P08_GPIO_17
P18_GPIO_28
P45_GPIO_31 / DCDC_ANA2_SW_P - not connected on dev board either
DCDC_ANA2_SW_N (P46)
</pre></div>
<p>CC3220S/F <-> CC3220MODAS</p>
<div class="highlight"><pre><span></span>Pin55 GPIO1 UART0_TX <span class="o"><-></span> Pin46
Pin57 GPIO2 UART0_RX <span class="o"><-></span> Pin47
Pin07 GPIO16 UART1_TX <span class="o"><-></span> Pin07
Pin08 GPIO17 UART1_RX <span class="o"><-></span> Pin08
</pre></div>
<p>~/ti/ccsv8/simplelink_cc32xx_sdk_3_10_00_04/source/ti/boards/CC3220S_LAUNCHXL/CC3220S_LAUNCHXL.c
.rxPin = UARTCC32XX_PIN_08_UART1_RX --> .rxPin = UARTCC32XX_PIN_45_UART1_RX</p>
<h2><a href="#gotchas" id="gotchas">Gotchas</a></h2>
<p>Operation failed: fs_programming error: ret: -10289, ex_err: 2633 - FS_WRONG_SIGNATURE
Operation failed: fs_programming error: ret: -10287, ex_err: 2633 - FS_ERR_ROOT_CA_IS_UNKOWN</p>
<p><code>SL_ERROR_BSD_ESEC_ASN_NO_SIGNER_E</code> caused due to incorrect root ca cert on server. </p>
<p>Ensure thread stack size is sufficient for NWP. </p>
<div class="highlight"><pre><span></span>#define THREADSTACKSIZE 4096
</pre></div>
<p>-708
-111</p>
<h2><a href="#todos" id="todos">Todos</a></h2>
<ul>
<li>Intermittently errors and LED2 (10) stays on - fixed in 5e8e53d3</li>
</ul>
<div class="highlight"><pre><span></span>int32_t SendPingToGW(void) {
...
ret = TCPClient(...);
if (ret != 0) {
// ocassionally arrives here, i.e. LED2 doesn't go off and stays on and errors with either -708 or -111
}
else {
GPIO_write(Board_GPIO_LED2, Board_GPIO_LED_OFF);
}
}
</pre></div>
<h2>References ##</h2>
<ul>
<li><a href="https://www.embedded.com/electronics-blogs/say-what-/4441829/2/Your-very-own-IoT--Digging-deep-on-sensors"></a></li>
<li><a href="http://www.ti.com/tool/SIMPLELINK-CC32XX-SDK">Simplelink SDK</a> </li>
<li><a href="http://www.ti.com/tool/download/SIMPLELINK-CC32XX-SDK">Simplelink SDK Download</a></li>
<li><a href="https://www.ti.com/product/CC3220S/description">CC3220S Description</a></li>
<li><a href="https://www.ti.com/product/CC3220S/toolssoftware">CC3220S Software</a></li>
<li><a href="http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/sysbios/index.html">SYS/BIOS Downloads</a></li>
<li><a href="http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/index.html">TI-RTOS</a></li>
<li><a href="swra513a.pdf">CC3x20 Simplelink Wi-Fi IoC Solution Device Provisioning (Rev. A)</a></li>
</ul>
<h2><a href="#useful" id="useful">Useful</a></h2>
<ul>
<li><a href="https://gist.github.com/laher/5795578">tls certs</a></li>
<li><a href="https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/t/829406?tisearch=e2e-quicksearch&keymatch=sntp">sntp</a></li>
</ul>
<p>dummy-root-ca-cert
dummy-trusted-ca-cert
dummy-trusted-cert</p>
<p>binary signed with private key dummy-trusted-cert-key and cert file dummy-trusted-cert</p>
<p>Replace with</p>
<p>dst rootca ca x3
let's encrypt authority x3
b00m-trusted-ca-cert
b00m-trusted-cert</p>
<p>In <code>Trusted Root-Certificate Catalog</code> replace </p>
<div class="highlight"><pre><span></span>certificate-playground/certcatalogPlayGround20160911.lst
certificate-playground/certcatalogPlayGround20160911.lst.signed_3220.bin
certificate-catalog/certcatalog20190217.lst
certificate-catalog/certcatalog20190217.lst.signed_3220.bin
</pre></div>
<p>Sign the mcuimg.bin with b00m-trusted-cert-key / b00m-trusted-cert</p>
<p>turns out, the name of the root ca and trusted ca certs <em>on the simplelink device</em> need to have the file name match the certificate name (all lowercase and spaces are ok). to find the name of your cert, use
openssl x509 -text -noout -in name_of_cert</p>
<p>and look for CN in the subject field.</p>
<p>when adding the mcu image, the -cert option points to the simplelink filename.</p>
<p>So, if you upload your code signing cert with SL_filename 'my cool cert', then the --cert option would look like
--cert "my cool cert"</p>
</div>
<footer class="post-footer">
<div class="meta">
In «<a href="/category/manual.html">manual</a>»
by <a href="/author/rcs.html">RCS</a><br />
Tags: #<a href="/tag/hardware.html">hardware</a> #<a href="/tag/software.html">software</a> #<a href="/tag/tronix.html">tronix</a> </div>
</footer>
</article>
</div>
<aside class="page-sidebar">
<nav class="widget">
<h3>Site</h3>
<ul>
<li><a href="/index.html">Home</a></li>
<li><a href="/archives.html">Archives</a></li>
<li><a href="/tags.html">Tags</a></li>
</ul>
</nav>
<nav class="widget">
<h3>Categories</h3>
<ul>
<li><a href="/category/algorithms.html">Algorithms</a></li>
<li><a href="/category/chatter.html">Chatter</a></li>
<li><a href="/category/cheat-sheet.html">Cheat Sheet</a></li>
<li><a href="/category/cheatsheet.html">cheatsheet</a></li>
<li><a href="/category/detailed.html">Detailed</a></li>
<li><a href="/category/events.html">Events</a></li>
<li><a href="/category/language.html">language</a></li>
<li><a href="/category/manual.html">manual</a></li>
<li><a href="/category/misc.html">misc</a></li>
<li><a href="/category/plan.html">plan</a></li>
<li><a href="/category/review.html">Review</a></li>
<li><a href="/category/setup.html">Setup</a></li>
<li><a href="/category/software-encryption.html">software, encryption</a></li>
<li><a href="/category/teaser.html">Teaser</a></li>
</ul>
</nav>
<nav class="widget">
<h3>Social</h3>
<ul>
<li><a href="https://stackoverflow.com/users/1093710/sridhar">SO</a></li>
<li><a href="https://github.com/tortuoise">Github</a></li>
<li><a href="/" rel="alternate">Flux Atom</a></li>
</ul>
</nav>
</aside>
<footer class="page-footer">
<p> Powered by <a href="http://pelican.readthedocs.org">Pelican</a></p>
</footer>
</div>
</body>
</html>