基于CAN总线的TMS320F28335 Bootloader设计说明

1 设计目的

根据客户要求,开发一款基于CAN总线的TI公司TMS320F28335 DSP(数字信号处理器)bootloader,以方便应用程序的刷写。CAN设备采用周立功CAN卡(USBCAN-I、USBCAN-II、USBCAN-E-mini)。

2 专有信息

2.1 TMS320F28335

TMS320F28335是TI公司推出的一个具有强大控制能力和信号处理能力的32位单精度浮点型DSP,其I/O电压为3.3V,内核电压为1.9V,主频可达150MHz;片上带有256kB的16位Flash和34kB的16位SARAM,8kB的Boot ROM,1kB的OTP ROM以及CAN接口等多种外设接口。以下简称28335或F28335。

2.2 CAN总线

CAN总线的全称为控制器局域网络(Controller Area Network,CAN),是一种可以利用多物理介质传输数据的多主方式串行通信总线,如双绞线、光纤等,其中最为常用的是双绞线。CAN总线上的两条信号线分别被称为“CAN_H”和“CAN_L”,其使用方式是差分电压传送。

2.3 Bootloader

嵌入式系统引导加载程序(Bootloader)是BSP的一部分,是嵌入式系统上电后运行的第一段软件代码,是整个系统执行的第一步。Bootloader依赖于具体的嵌入式硬件结构,核心功能是操作系统引导(boot)和加载(load),此外还可以支持简单的用户命令交互、操作系统启动参数设置、系统自检和硬件调试等功能。Bootloader通常会存放在被称为boot ROM的非易失性的存储器(通常是NOR Flash ROM)中,可以存储操作系统映像、应用程序代码和用户配置数据等信息。
在汽车电子和工业控制应用中,常常需要设计基于CAN总线的Bootloader,用来实现对封装好外壳的ECU等控制器升级,而不用对控制器进行拆卸、拆解等,破环控制器的封装结构。方便系统的软件升级和维护。

2.4 编程方式

TMS320F28335将应用程序固化到片上Flash主要有三种方式:在电路编程(In Circuit Programing,ICP)、在系统编程(In System Programing,ISP)和在应用编程(In Application Programing,IAP)。其中,ICP固化主要通过TMS320F28335的JTAG接口连接仿真器,并配合使用TI提供的CCS集成开发环境实现;ISP固化主要通过配置TMS320F28335的GPIO管脚高低电平来改变启动模式,并利用出厂固化的Bootloader程序实现;IAP固化通过定制的Bootloader程序实现。
本设计实现IAP,即在应用于编程。

3 方案概述

本设计为基于F28335芯片,定制的在应用编程(IAP)Bootloader软件,由上位机程序,bootloader引导程序(也称二次bootloader程序)和应用程序3部分组成。上位机为CAN刷写控制和操作界面,编程数据传输媒介为CAN总线,即上位机驱动CAN卡通过CAN向芯片传输flash文件,bootloader引导程序接收flash文件,并执行对flash的刷写工作,实现对芯片应用程序的更新。
其上位机采用VC++编写,以windows应用的方式呈现。Bootloader引导程序在CCS(code composer studio)中编码,以C源码的方式呈现。用户应用也在CCS中编码,以C源码的方式作为应用示例呈现,作为用户应用开发的参考。
【Bootloader引导程序是DSP出厂固化的一段对用户进行保护、不允许被改变的代码,主要用来DSP(如CAN接口)的初始化,并与上位机进行通讯,接收来自上位机的程序,写入指定地址,升级后转至用户程序。】
【上位机对通过与Bootloader引导程序的交互与数据传输,实现应用程序hex文件的传输,编程操作控制的状态界面显示】
【应用程序以HEX文件格式呈现,本设计中以S-record文件形式输出。S-record文件可以通过CCS7设置,本设计中定义为S37文件,设置CCS7在编译过程中直接生成,无需额外第三方工具参与转换】

4 开发资源

4.1 硬件资源

F28335开发板或功能板、TI仿真调试器、周立功CAN卡

4.2 软件资源

CCS7.0.0或其他兼容版本(尽量与应用客户保持一致)
基于CCS的最小系统代码+CAN驱动程序+flash驱动程序
Visual Studio 2010

4.3 其他资源

其它bootloader参考程序(如基于S32K144的bootloader)、电源、调试电脑、数据监测电脑和CAN卡。

4.4 参考资料(书籍或文献)

TI官网《Flash2833x_API_Quickstart.pdf》
《轻松玩转DSP:基于TMS320F2833x》 马骏杰 尹艳浩 王旭东 2018-12-05
《基于S32K148的车辆网关CANBootloader开发与实现》 袁锋、张伟等 2021

5 设计实现

5.1 核心思路

在线升级的核心思想是通过bootloader程序(bootloader引导程序,在F28335芯片中,可以称为二次Bootloader程序)烧写程序(应用程序),这两个程序是相互独立的工程,被分别固化在TMS320F28335片上Flash的不同区间,为避免造成程序运行紊乱,需要对这两个程序所在的存储空间进行合理分配。
特别说明:本bootloader底层程序将不使用boot-ROM区域(也称为一次boot loader),直接跳转到flash地址执行二次Bootloader程序。
片上Flash的空间分配,通过CMD文件完成。CMD文件为链接命令配置文件,用于分配程序对应代码、数据和变量的存储空间。初步地址分配如下:
应用程序被分配在片上Flash的B~H扇区,Bootloader引导程序被分配在片上Flash的A扇区。其中,应用程序的BEGIN区位于片上Flash H扇区的0x300000地址处,引导程序程序的BEGIN区位于片上FlashA扇区的0x33FFF6地址处
在这里插入图片描述
二次Bootloader程序通过仿真器烧录,且固化在芯片中,一般不需要更改。如需更改,需要使用仿真器再次烧录。应用程序可通过CAN总线多次重复烧录,不需要调试器。

5.2 芯片内核资源分析

5.2.1 时钟系统

在这里插入图片描述
为了得到150MHz的系统时钟,一般做法是先将30MHz的晶振10倍频,再进行2分频。若要使用外设,必须使能该外设的时钟。
【目标电路板系统时钟为120MHz,采用外部晶振为24MHz,同样采用10倍频,2分频的方式实现。】
在这里插入图片描述

5.2.2 看门狗

喂狗,使得计数器不溢出导致系统复位。核心代码在于使能看门狗。

5.2.3 地址空间

(参考书:《轻松玩转DSP:基于TMS320F2833x》1.2章),更详细的地址空间,见参考手册。
总的来说,地址分配如下:
RAM 空间为:0x00000000 ~ 0x0000F000
FLASH空间为:0x30000000 ~ 0x33FFFFFF
在这里插入图片描述

5.2.4 flash地址映射

TMS320F28335片上有256×16位【特别说明:F28225flash的宽度为16位,这点特别重要】嵌入式FLASH存储器,其由8个32KB×16位扇区组成,用户可对其中任意一个扇区擦除、编程和校验,而其他扇区不变。这8个扇区分别命名为A~H。
在这里插入图片描述

5.2.5 F2833x的BootROM存储器的映像

在这里插入图片描述

5.2.6 CAN驱动模块

本设计采用CAN_A实现bootlaoder数据传输。使用CAN模块主要是实现:1、初始化(重点在时钟设置、波特率和邮箱配置);
2、发送函数;
3、接收函数;
4、CAN接收中断服务函数。
在这里插入图片描述
在这里插入图片描述
注意:1、记得开启CAN外设时钟。

5.2.7 flash驱动模块

参考《Flash2833x_API_Quickstart》里的相关描述。需要注意几点
【1、 flash 时钟标定参数为8.333,并关联参数】
【2、 擦除和编程函数的调用】
【3、 Flash编程字节顺序】

5.2.8 中断向量

外设中断扩展模块(PIE)通过复用少量的中断输入来扩展大量的中断源。PIE模块支持96个独立的中断源,这些中断源被分成8组。每组中断都连接至12个CPU核中断(INT1~INT12)中的一个。96个中断都对应有各自的中断向量表,这些向量表存储在特定的RAM模块并且可以根据需要修改【如何修改?】。CPU响应中断时,可自动获取相应的中断向量。中断的优先级可以通过硬件和软件来控制。在PIE模块中,每个中断都可以独立使能和禁止。
PIE向量表用来存储系统中每个中断服务程序(ISR)的入口地址,每 个中断源(包括复用和非复用中断)都有一个中断向量。在设备初始化时 就要设置好中断向量表,在具体操作中可以根据需要对其进行修改。
在这里插入图片描述
外设中断向量表地址:0x000D00~0x000DFE。相关地址映射文件在CMD文件DSP2833x_Headers_nonBIOS.cmd中定义。

5.2.9 编译和链接文件(CMD文件)

DSP2833x_Headers_nonBIOS.cmd文件,是每个DSP程序均需要的。在引导程序中,设置bt_F28335.cmd,分配引导程序的存储空间为:
在这里插入图片描述
在bt_F28335.cmd中,需要设置Flash28_API、ramfuncs等函数的空间,等。
在应用程序中,设置F28335.cmd,分配应用程序的存储空间为:【用户可以修改,但是不可以修改BEGIN的地址空间和长度】
在这里插入图片描述
【以上地址分配验证是可行的。注意:在开发过程中,APP的BEGIN地址应先映射到0x33FFF6,后续应用再行调整到0x300000。】

5.3 芯片启动分析

TMS320F28335在出厂前固化了一段程序,其内容是:当上电复位后,DSP的固化程序直接从由中断向量表中读取复位中断的中断向量0x3FFFC0地址处开始执行,初始化DSP芯片,并决定其引导模式(通过调用SelectBootMode读取GPIO的固定管脚),然后将编写好的程序烧写在片上Flash的程序入口0x33FFF6地址处。TMS320F28335 Flash启动过程如图1所示。
在这里插入图片描述
在这里插入图片描述

5.4 bootloader流程分析

在这里插入图片描述

5.5 系统组成框架

在这里插入图片描述
在这里插入图片描述

6 软件设计

6.1 上位机软件设计

上位机端软件首先读取.s19文件,通过解析.s19文件内容,将其拆分为多条数据帧结构。上位机端软件与DSP端软件通过CAN总线进行通讯。
上位机端软件向DSP端软件发送的每帧数据都带有校验和,当DSP端程序接收到该帧数据后,通过校验和对接收数据进行确认。确认完毕后,DSP端软件将确认帧发送给上位机端软件,上位机端软件收到DSP端发送的确认帧后,再向DSP端软件发送下一帧数据;当上位机软件将全部数据发送完毕后,上位机端软件向DSP端软件发送数据的总长度,DSP端软件将该总长度与接收到的数据长度进行比较,将比较结果发送给上位机端软件,完成了整个数据的总校验。参考界面如下:
在这里插入图片描述

6.2 二次bootloader软件设计

DSP端软件主要包括引导程序主要为二次bootloader程序,用来和上位机软件进行CAN总线通讯接收DSP程序可执行代码文件,并将接收到的可执行代码文件烧写到FLASH中,而且会在系统上电复位后会判断是执行FLASH烧写工作还是运行用户应用程序工作;
为保证接收数据的准确性和完整性,DSP端软件在接收数据的过程中,不执行对RAM或FLASH操作的相关代码;同时,关闭其他的外部中断,仅响应CAN总线接收中断,保证了数据接收的实时性。此外,DSP端软件将接收到的数据存储在外扩的FLASH中,等接收完全部数据后,再进行程序的烧写,防止在接收数据过程中出现意外而导致系统程序不能正常工作。
FLASH的烧写工作也是DSP端软件需要实现的重要功能。在擦除或读写FLASH之前,必须先执行相应的命令字序列,即在指定的FLASH地址处写入指定的指令代码。
向FLASH的指定地址中写入数据,需要四个总线周期。前两个是解锁周期,第三个是建立编程命令,最后一个周期完成向编程地址中写入编程数据。待写入的数据为.Hex文件内容。
在这里插入图片描述

6.3 应用程序设计

应用程序软件需要对CMD文件进行修改,以确定地址分配。代码部分不用特别处理。本设计提供模板。

7 参考文献

TI官网《TMS320F2833x、TMS320F2823x 实时微控制器》
TI官网《TMS320x2833x、TMS320x2823x Technical Reference Manual》
TI官网《Flash2833x_API_Quickstart.pdf》
《轻松玩转DSP:基于TMS320F2833x》 马骏杰 尹艳浩 王旭东 2018-12-05
《DSP控制器原理与技术应用》 宋合志编著 2012
《基于S32K148的车辆网关CANBootloader开发与实现》 袁锋、张伟等 2021

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1554923.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

javaWeb开发

Java Web开发涉及使用Java编程语言进行Web应用程序的开发。下面是有关Java Web开发的一些主要技术、工具和教程资源,以及一些案例和项目。 1. 基础知识 1. Java SE(Java Standard Edition): 学习Java语言的基础语法和面向对象编程概念。 2. H…

模型的深度优化

文章目录 一、测试模型是否正确二、图形打印直观观察三、保存训练模型四、正确率(仅使用于分类问题) 一、测试模型是否正确 本文承接我的上一篇文章完整网络模型训练(一) 运用测试数据集(test_dataloader)…

【宽搜】4. leetcode 103 二叉树的锯齿形层序遍历

1 题目描述 题目链接:二叉树的锯齿形层序遍历 2 题目解析 根据题目描述,第一行是从左往右遍历,第二行是从右往左遍历。和层序遍历的区别就是: 在偶数行需要从右往左遍历。 因此,只需要在层序遍历的基础上增加一个变…

【WebGis开发 - Cesium】三维可视化项目教程---初始化场景

系列文章目录 未完待续~ 目录 系列文章目录引言一、Cesium引入项目1.1 下载资源1.2 项目引入Cesium 二、初始化地球2.1 创建基础文件2.1.1 创建Cesium工具方法文件2.1.2 创建主页面 2.2 看下效果 三、总结 引言 本教程主要是围绕Cesium这一开源三维框架开展的可视化项目教程。…

银河麒麟服务器镜像完整性验证:MD5校验

银河麒麟服务器镜像完整性验证:MD5校验 步骤一:获取标准MD5值步骤二:计算MD5值步骤三:对比MD5值 💖The Begin💖点点关注,收藏不迷路💖 在下载或传输银河麒麟服务器镜像时&#xff0c…

Oracle架构之表空间详解

文章目录 1 表空间介绍1.1 简介1.2 表空间分类1.2.1 SYSTEM 表空间1.2.2 SYSAUX 表空间1.2.3 UNDO 表空间1.2.4 USERS 表空间 1.3 表空间字典与本地管理1.3.1 字典管理表空间(Dictionary Management Tablespace,DMT)1.3.2 本地管理方式的表空…

Ubuntu 中 Redis ,MySQL 基本使用

1、Redis (1)启动Redis 服务端客户端命令 服务端 ps aux | grep redis 查看redis服务器进程 sudo kill -9 pid 杀死redis服务器 sudo redis-server /etc/redis/redis.conf 指定加载的配置文件客户端 连接redis: redis-cli运⾏测试命令&am…

《python语言程序设计》2018版第8章19题几何Rectangle2D类(上)--原来我可以直接调用

2024.9.29 玩了好几天游戏。 感觉有点灵感了。还想继续玩游戏。 2024.10.4 今天练习阿斯汤加练完从早上10点睡到下午2点.跑到单位玩游戏玩到晚上10点多. 现在回家突然有了灵感 顺便说一句,因为后弯不好,明天加练一次. 然后去丈母娘家. 加油吧 第一章、追求可以外调的函数draw_r…

【Python】pyenv:管理多版本 Python 环境的利器

pyenv 是一个强大的 Python 版本管理工具,它允许开发者在同一台计算机上轻松安装和管理多个 Python 版本。对于需要在不同项目中使用不同 Python 版本的开发者来说,pyenv 是一个非常有用的工具,因为它可以帮助用户在全局和项目级别控制 Pytho…

C/C++/EasyX——入门图形编程(4)

【说明】紧接上文(。・ω・。),好了,接下来,就让我们开始学习图像处理和获取鼠标消息的函数吧。(各位友友们不要着急,想在短时间内就想做小游戏或者写出各种好看的画面是不简…

小白快速上手 Docker 03 | Docker数据卷

数据卷 在前面使用Docker时,可能会遇到以下几个问题: 当Docker 里的容器挂了以后打不开,这时候只有删除该容器了,但删除容器会连容器中的产生的数据也一起删除了,大部分场景下这是不能接受的。Docker容器与容器之间不…

【深度学习基础模型】深度残差网络(Deep Residual Networks, DRN)详细理解并附实现代码。

【深度学习基础模型】深度残差网络(Deep Residual Networks, DRN)详细理解并附实现代码。 【深度学习基础模型】深度残差网络(Deep Residual Networks, DRN)详细理解并附实现代码。 文章目录 【深度学习基础模型】深度残差网络&a…

使用前端三剑客实现一个备忘录

一,界面介绍 这个备忘录的界面效果如下: 可以实现任务的增删,并且在任务被勾选后会被放到已完成的下面。 示例: (1),增加一个任务 (2),勾选任务 &#xff…

Chat登录时出现SSO信息出错的解决方法

目录 1. 问题所示2. 问题所示3. 解决方法 1. 问题所示 此贴主要是总结回顾,对此放置在运维专栏 出现如下问题,很懵,以为是节点挂了还是网址蹦了 一直刷新,登录之后就出现这个问题 2. 问题所示 对于SSO,也就是单点登…

ExcelToWord-Excel套打Word-Word邮件合并工具分享

Excel to Word转换工具分享 在日常工作或学习中,我们常常需要将Excel中的数据导出到Word文档中,以便更好地展示信息。市场上有许多Excel to Word的转换工具,它们各有特色。今天,我们就来推荐几款这样的工具,并探讨一下…

基于Springboot+Vue的教师科研管理系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

用Python实现运筹学——Day 12: 线性规划在物流优化中的应用

一、学习内容 线性规划在物流优化中可以用于解决诸如配送路径优化、货物运输调度等问题。配送中心的路径优化问题本质上是寻找一条最优路径,在满足需求点的需求条件下,最小化配送的总运输成本或时间。常见的物流优化问题包括: 配送中心的货…

Python小示例——质地不均匀的硬币概率统计

在概率论和统计学中,随机事件的行为可以通过大量实验来研究。在日常生活中,我们经常用硬币进行抽样,比如抛硬币来决定某个结果。然而,当我们处理的是“质地不均匀”的硬币时,事情就变得复杂了。质地不均匀的硬币意味着…

【C++】—— 类和对象(中)

【C】—— 类和对象(中) 文章目录 【C】—— 类和对象(中)前言1. 类的默认成员函数2. 构造函数3. 析构函数4. 拷贝构造函数5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载 结语 前言 小伙伴们大家好呀,昨天的 【C】——类和对象(上) 大家理解的怎么样了 今天…

网约班车升级手机端退票

背景 作为老古董程序员,不,应该叫互联网人员,因为我现在做的所有的事情,都是处于爱好,更多的时间是在和各行各业的朋友聊市场,聊需求,聊怎么通过IT互联网 改变实体行业的现状,准确的…