|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目录
+ V q4 G* ~' K+ M0 d, `* l6 [7 `6 n6 G6 {
1
& F+ D/ C2 L1 M+ N初识Bootloader( `4 h6 m, |. R0 r6 z
; @# ` K% z8 Z1 Z
1.1 一次Bootloader) f* A1 {) `8 ^
9 y1 H7 e3 z' _8 n
1.2 二次Bootloader- ?4 I0 }# @# ]" ~7 X- _3 c3 G
& y+ q5 N6 \4 ]! W& b1.3 DSP上电引导过程" |& L& T. F# g, j
6 i% r7 c o% G. C4 w1 ]& R! d2: y) J" q# ?! @" \& Y* r
关于c_int00
+ x8 q* a' N- R1 O' P- `
$ |% j3 G& D* x W# p2.1 c_int00完成的工作
4 r2 H& ?! s5 ?) J% [) ^0 _! I) [0 ^
2.2 系统初始化
7 T. f* `6 ]. J8 `6 d0 E! ]# C& `, _3 M- J. ~' K! E: T- k
2.3 全局变量初始化
% h" x2 P8 ?# q/ E" L9 l+ X$ G" p/ N6 d3 U( \) @
2.4 全局对象构造7 t0 I( }; K7 k5 c/ Q' ?1 ~5 k
, r! S3 k9 R2 C/ k2.5 mAIn函数与exit函数的调用1 X9 b8 E- |8 k% ?( W
+ I5 u8 X W; W8 J5 h0 [) X3 `5 V" t! `# g& J$ C3 {
CMD文件与DSP存储空间
, x3 Q8 e! s" z7 @+ Z( [
# k1 j$ j( h# E& ^: s3.1 MEMORY和SECTIONS指令
& X- J1 M+ k6 z! @; g4 d5 w* q; Z* ^# p) G& b2 I
3.2 程序与数据“段”# n1 F1 U7 K0 J9 {. o
5 d. r% v/ _( |+ o
40 X9 `5 l: V$ E6 j' J0 j2 b
Bootloader数据流, |( S4 |; _' o# e2 n
2 a* E0 A5 a8 G, p4 U4.1 数据流结构
. F$ x8 `+ b8 i9 n' A' I5 }4 T# }. T) x/ E3 x# F
4.2 16-bit数据流; A* d" e2 A% N
' V. C, L& S) z/ s; r6 J9 h
4.3 8-bit数据流& C' S3 ?/ ^8 N6 w- e6 m! \3 m8 }
2 f. N9 k5 e. ^; l2 {5& a3 B4 ~& F, ~1 a. n& E3 B/ V
FLASH擦写操作 —— FLASH API的使用" v: w! |: n/ X# `6 i4 S& T6 v( f
1 ]1 }& x, [ b6 E$ |2 a5.1 FLASH操作的重要特点8 L. D- x# I2 L) S8 {
& E o0 Y' T- u6 h) G3 W5.2 FLASH API使用步骤
4 Q a* @2 I( ?5 S8 z& K( h# ^$ {) v% T, J5 h1 z2 |% w7 W
5.3 FLASH API常用函数使用举例
0 `# z, Y; g. y
& w( V2 z6 E, R62 l6 O0 H, s- s% S
Bootloader设计过程中的9大关键点$ z8 T8 w, H* k+ m" S
5 z; A' ~; j2 O4 r+ ~6.1 Bootloader程序在升级过程中不被擦除的实现方法0 `% s1 j+ O) [& d" U
( ]- d, e: o7 Z8 I1 a0 }9 i8 x6.2 上电后先进入Bootloader再跳转至mAIn()函数的实现方法; o4 s* q9 I, @
$ ~! a" `0 J1 b9 t
6.3 Bootloader程序作为CCS应用程序工程一部分的实现方法
* `7 @8 U" |* H
, n( l1 O! V: |& L& M+ d* {6 k7 Y6.4 Bootloader与上位机形成交互式通信6 E" w* S9 W5 `" Z1 h
% S) P f/ G5 Q6.5 Bootloader程序能够对接收数据校验的实现方法
( K/ A$ t) F1 d: o0 V! m$ i: N: d3 }8 v0 h/ |) a9 P1 \& o
6.6 在数据出错等情况下能够自动重启的实现方法
& t+ R8 H' L: s% A. f$ X
5 s- i3 ~" k: C f! ^" P71 z) j# I1 P% _/ j# P! K" K
CCS输出文件格式 —— ASCII-Hex、Intel-Hex与Binary-Hex文件8 L& d% O3 k8 S# g4 S
; \0 E3 U: S6 f1 ^; w
7.1 CCS配置生成Hex文件的方法% _9 k. r5 I2 q
3 o- f5 Q6 K6 N" M* ]7.2 ASCII-Hex
( f2 a& R2 ~: ]% n! c& Q. c" A) ~& j0 X9 i
7.3 Intel-Hex
8 |' G9 Z! z1 n+ w
6 `6 [. f9 H4 O: ?$ o+ S7.4 Binary-Hex
5 r& [( ?/ q$ ~, y7 @# n0 z L
. v2 ]! b7 Z. v6 n1 U6 h
& g8 W6 K! P4 g& c- k3 d8 w! G) b
; E3 T9 n2 c C9 g& H: Z# t0 ~: ^8 H% e% @1 Q4 p
$ k7 L6 y& j) t7 @) ~; {# J: a4 Bootloader数据流4 E3 L8 ~6 I8 Z, j& j* R
. `9 @1 W; x7 W1 }# h. I, ?! A( `“在线升级程序时,程序以怎样的数据流存在”
2 t7 P9 Q1 g4 q# M9 r8 n3 S9 t" L7 y& L4 p. T9 U' a7 O0 r
当我们设计Bootloader时,在线升级程序通常使用的是.hex文件,.hex文件有多种类型,我们可以依据需求进行选择,但.hex文件中的数据是以固定“数据流格式”存在的。
% s( n# i" ~' z2 B( ]( b( m
w# s" G- Q( n6 d! ~8 x6 k通常情况下,Bootloader数据流分为16-bit和8-bit两种,二者大同小异,只是数据存储类型不同。更多关于Bootloader数据流的内容请参考《TMS320xxxx xxxx Boot ROM Reference Guide》。
% k! h1 j$ A- I: R3 U) V+ V$ l. K: U. K( q6 \, R
4.1 数据流结构 S9 M: \3 l: Z* A. \3 J
7 J }) d# D. {2 A! Q0 l( lBootloader数据流中的数据都采用16进制。
( G: R3 z5 i( g; s! z
2 n4 ]- s1 o# e- O2 H$ \7 c5 G3 U数据流中:* S7 I0 |: O8 T
+ a6 B# O0 s0 N2 U0 B; ]
第1个16-bit字为关键字,用以表明后续数据的宽度:8 bits或16 bits。关键字0x08AA代表8-bit数据流,0x10AA代表16-bit数据流。
1 F' w8 T- E' q+ h( b, `9 O$ s# j6 Y% R* M2 i" r' p5 S
第2~9的8个字为保留字:0x0000。) N g* L) x- ]/ L
" \; e }7 m# N8 }& n" W' x第10~11的2个字包含着22-bit的程序入口地址。+ r! _) }' M5 j% A
& g {- g: m0 q- Z- i1 }) q: X第12个字代表第一个数据块的长度,无论是在8-bit或16-bit数据格式中,该长度的单位为字(16-bit),也就是说在8-bit数据格式中,需要前后两个字节拼成一个16-bit字后进行数据长度统计。 o, z5 k4 f- |. b" G" U
+ P) I/ h' F, x L/ n0 z# D0 t
第13~14个字代表第一个数据块存放的起始地址。0 ^6 r; z. Q" q' @
9 l* U6 o/ c+ \5 l( F, a
后续的字是数据块的具体内容。
9 r" W3 v+ K" J0 y- [( `+ w
$ V+ ?# o8 W: V2 ]当一个数据块结束后,紧接着的字分别为下一个数据块的长度、存放起始地址、数据内容,如此循环,直至当数据块长度为0x0000。. ^' r" T& k. k) X0 @) G
) F: W' c& A q. I% _& \
也就是说Bootlodaer数据流必须以0x0000结尾。4 q* _" h5 P* @ y
* R: l: C6 ^# q4.2 16-bit数据流
6 D/ }/ L- t) Z/ O/ x8 y* n
8 d) T3 Q. ?9 ~- o+ F
) {! {& L/ ]4 {6 L/ o* Z+ R% R& _9 t: e1 P
! ^- O% W9 n% ~+ D* V |
|