【飞思卡尔 MC9S12】BootLoader 上位机

发布者:Xiangtan最新更新时间:2020-05-17 来源: eefocus关键字:飞思卡尔。  MC9S12。BootLoader  。上位机 手机看文章 扫描二维码
随时随地手机看文章

本篇讲述BootLoader上位机开发。


源码地址:https://download.csdn.net/download/u010875635/11692122


此上位机采用WPF框架,C#语言开发,支持周立功的CAN设备和ValueCAN。


由于手头上暂时没有硬件,无法实际演示,大家先凑合看示例图。


注意,有很多人操作误区在于,将S19文件选择成了Bootloader,这里应该选择app,就是你自己的应用程序。


Bootloader与App分别占用2个非分页区。


Bootloader: 0xC000-0xFFFF(实际到0xF7FF,保留一个sector给vector table)


Application: 0x4000-0x7FFF,加上其它分页区(转换成全局地址为0x7F4000-0x7FFFF)


若是不知道怎么写App,可参考范例,App Demo源码地址:https://download.csdn.net/download/u010875635/12078243

 

BootloaderPage.xaml        --        Bootloader刷写界面


S19ParseWithText             --        为S19文件解析查看界面,仅用于查看数据,与刷写无关


ClassBootloaderForCAN   --        协议封包解包在


CANCommon                    --        通用的CAN连接断开、发送接收的类(实际收发在CANDevices类库,大家也可以添加自己手上以后的CAN设备的API,以便于支持)


VAlueCAN和ZlgCAN.xaml --        CAN配置控件,用于设置各个不同的CAN配置参数,方便转换成通用的例如波特率的参数。

///

        /// 更新进度

        ///

        void UpdateProgress()

        {

            double percentNoDiv100 = m_CmdCount.SendFrameCount * 100.00 / m_CANSendFrameCount;// e.ProgressPercentage;// m_CmdCount.SendFrameCount * 1.0 / m_CANdataList.Count;

            double usedTime = DateTime.Now.Subtract(m_SendDataSartTime).TotalSeconds;

            double leftTime = usedTime / percentNoDiv100 * (100 - percentNoDiv100);

            //TextBlockChangeMsg("发送进度", "已发送帧数:" + m_CmdCount.SendFrameCount.ToString(), System.Windows.Media.Brushes.Gray);

            TextBlockChangeMsg("刷写进度", "已刷写帧数: " + m_CmdCount.ReceiveFrameCount.ToString() + " ,已用时间:" + usedTime.ToString("0.00") + " s  ,剩余时间:" + leftTime.ToString("0.00") + " s", System.Windows.Media.Brushes.Gray);

            ProcessUpdate(percentNoDiv100);

 

        }

 

        ///

        /// 开始烧录

        ///

        void TryBurnS19()

        {

            //SendData();

            //return;

 

            DateTime startTime;

            

            ProcessUpdate(0); //进度清零

 

 

 

            TextBlockAddMsg("检查是否已擦除Flash", System.Windows.Media.Brushes.Black);

 

            

 

            m_Mtcl1DevelopCmd.SendNormalBytes(m_UpdateAppSendCmdCANID, GetCurrentCANIndex(),m_CanDataParse.CanErasePackage(m_ValidMinGlobalAddr, m_ValidMaxGlobalAddr));

 

            startTime = DateTime.Now; //开始计时

            while (m_McuState != McuState.McuFlashErased)

            {

                uint count = 0;

                while (count < 100000)

                    count++;

                if (DateTime.Now.Subtract(startTime).TotalSeconds > 10) //是否超过10s没有接收到

                    break;

            }

            if (m_McuState != McuState.McuFlashErased)

            {

                TextBlockAddMsg("擦除超时", System.Windows.Media.Brushes.Red, 1);

                BurnHex();

                return;

            }

            string ts = DateTime.Now.Subtract(startTime).TotalSeconds.ToString();

            TextBlockAddMsg("擦除完毕!,总耗时:" + ts + "s", System.Windows.Media.Brushes.Blue);

 

            TextBlockAddMsg("开始发送数据,CAN帧数;" + m_CANSendFrameCount.ToString(), System.Windows.Media.Brushes.Black);

 

 

            //m_UpdateProgressTimer.Start(); //定时更新UI

            SendData(); //发送数据

            //m_UpdateProgressTimer.Stop(); //关闭定时更新UI

            

            UpdateProgress();

            

            TextBlockAddMsg("发送数据结束,耗时: " + DateTime.Now.Subtract(m_SendDataSartTime).TotalSeconds.ToString("0.00") + "s", System.Windows.Media.Brushes.Black);

 

            m_Mtcl1DevelopCmd.SendNormalBytes(m_UpdateAppSendCmdCANID, GetCurrentCANIndex(), m_CanDataParse.g_DataEndCmd); //数据结束命令

 

            BurnHex();

            

        }

 

        ///

        /// 发送后检查是否超时或错误

        ///

        ///

        bool CheckAfterSend()

        {

            if (!SendDataCheck_Wait(ref m_CmdCount.SendFrameCount, ref m_CmdCount.ReceiveFrameCount, 2000)) //发送中断

            {

                TextBlockAddMsg("发送超时 ", System.Windows.Media.Brushes.Red);

                return false;

            }

 

            if (m_ReponseState != ClassBootloaderForCAN.ReponseState.CmdRunOK)

                return false;

 

            return true;

        }

 

        ///

        /// 发送数据

        ///

        private void SendData()

        {

 

            m_CmdCount.SendLineCount = 0;

            m_CmdCount.SendFrameCount = m_CmdCount.ReceiveFrameCount = 0;

            m_SendDataSartTime = DateTime.Now; //开始计时

 

            bool isNotBreak = true;

            

            //发送数据

            for (int i = 0; i < m_CANAddrList.Count && isNotBreak; i++)

            {

                m_Mtcl1DevelopCmd.SendNormalBytes(m_UpdateAppSendCmdCANID, GetCurrentCANIndex(), m_CANAddrList[i]); //发送地址命令

                m_CmdCount.SendLineCount++;

                m_CmdCount.SendFrameCount++;

                if (!CheckAfterSend() ) //发送中断

                {

                    isNotBreak = false;

                    break;

                }

 

                for (int j=0;j                {

                    m_Mtcl1DevelopCmd.SendNormalBytes(m_UpdateAppSendDataCANID, GetCurrentCANIndex(),  m_CANdataListList[i][j]); //发送数据

                    m_CmdCount.SendFrameCount++;

                    if (!CheckAfterSend()) //发送中断

                    {

                        isNotBreak = false;

                        break;

                    }

 

                }

                if(m_CmdCount.SendLineCount%10==0)

                    UpdateProgress();

 

            }

 

            

 

        }

 

        ///

        /// 检查接收情况

        ///

        ///

        bool CheckReceive(ref byte[] datas)

        {

            m_ReponseState = ProcessReponseState(ref datas); //获取返回状态

            switch (m_ReponseState)

            {

                case ClassBootloaderForCAN.ReponseState.AddressChecksumError:

                case ClassBootloaderForCAN.ReponseState.AddressOverRange:

[1] [2]
关键字:飞思卡尔。  MC9S12。BootLoader  。上位机 引用地址:【飞思卡尔 MC9S12】BootLoader 上位机

上一篇:【MPC5744P】FreeMaster上位机配置
下一篇:STM8学习笔记---串口printf函数的实现

推荐阅读最新更新时间:2024-11-10 10:29

飞思卡尔单片机 时钟初始化及配置
系统时钟可选择内部或外部时钟,时钟频率可倍频,总线时钟为系统时钟的1/2,定时器时钟可选择时钟源,时钟源可选择总线时钟或者是外部时钟等(我程序里选择的为总线时钟),并可以进行分频。 如我选择的为外部时钟,时钟频率为8M,进行4倍频,则系统时钟为32M,总线时钟为16M,定时器采用该总线时钟,分频系数为32,则定时器计数周期(即0x0001代表时间)为:1/(16/32)us=2us。
[单片机]
飞思卡尔助力MEMS产业集团的最新开源传感器融合计划
飞思卡尔提供传感器融合开发套件和高级软件开发支持, 缩短设计周期并促进物联网创新。 2014年11月6日,亚利桑那州斯科茨代尔讯—(MEMS执行者大会)—飞思卡尔半导体公司(纽约证据交易所:FSL)日前宣布为MEMS产业协会的开源传感器融合协作提供高级支持——加速创新社区(AIC)。除了提供业界领先的传感器融合软件,飞思卡尔还基于Freedom开发平台推出了传感器融合开发套件和其他开发技术,适用于飞思卡尔传感器和带蓝牙的Kinetis MCU。该开发套件包括飞思卡尔可选软件开发支持,并可与AIC开源传感器融合软件配合使用,以帮助开发人员更快更轻松地将传感器部署到全新和极具吸引力的应用,实现安全的互联网未来。 飞思卡
[物联网]
飞思卡尔MC9S12X:CAN初始化配置
一、MSCAN初始化流程 查询是否进入初始化状态,如不是,进入初始化状态。 此处需设置CANCTL0寄存器。 设置CAN波特率。 此处需设置CANBTR0,CANBTR1寄存器。 设置相应CAN口滤波器。 此处需设置CANIDMR寄存器。 使能MSCAN模块,设置MSCAN时钟源。 此处需设置CANCTL1寄存器。 离开初始化状态,返回正常运行模式。 此处需设置CANCTL0寄存器。 设置接收中断使能。 此处需设置CANRIER寄存器。 二、MSCAN初始化寄存器介绍 三、CAN初始化配置具体程序实现 /*******************************************************
[单片机]
<font color='red'>飞思卡尔</font>MC9S12X:CAN初始化配置
飞思卡尔T1024/23通信处理器为工业通信保驾护航
对于工业4.0,不同企业有着不同的诠释,而互联是其最大的特点。通过现场总线、工业以太网、RFID,甚至Wi-Fi等有线或者无线方式将工业应用中的所有设备连接起来,再通过网关联接到云端。飞思卡尔为许多有线和无线工业通信协议及人机界面提供工业控制和网络的解决方案,其安全系统可在制造或加工工厂的典型恶劣环境下,承受黑客、克隆、篡改和软错误。 优化工业应用 在飞思卡尔众多针对工业通信的产品中,最新推出的QorIQ双核T1024和T1023通信处理器是比较可圈可点的。T1024和T1023为工业市场提供优化的功能,包括面向HMI的显示界面单元、面向工业协议卸载的QUICC Engine以及针对高可靠性 始终在线 应用的错误
[工业控制]
<font color='red'>飞思卡尔</font>T1024/23通信处理器为工业通信保驾护航
大联大世平集团推出基于NXP产品的UWB 3D定位算法与上位机方案
2023年10月10日,致力于亚太地区市场的国际领先半导体元器件分销商--- 大联大控股宣布,其旗下世平推出基于恩智浦(NXP)S32K144、NCJ29D5D与KW38评估板的UWB 3D定位算法与上位机方案。 图示1-大联大世平基于NXP产品的UWB 3D定位算法与上位机方案的展示板图 随着现代汽车对于定位精度的要求越来越高,UWB超宽带技术受到车企的广泛关注。其中,最受欢迎的一种应用就是将UWB技术与车钥匙进行结合,从而实现更加安全和便捷的开门方式。为了加快厂商对UWB数字钥匙的开发,大联大世平基于NXP S32K144、NCJ29D5D与KW38评估板推出UWB 3D定位算法与上位机方案,该方案完全遵循3C协议
[网络通信]
大联大世平集团推出基于NXP产品的UWB 3D定位算法与<font color='red'>上位机</font>方案
让atmega8可以和飞思卡尔xs128一样对IO引脚进行定义
好吧,不得不承认,我使用飞思卡尔的XS128单片机已经非常之习惯了,结果一上手atmega8,最令我反感的就是atmega8不能对IO引脚进行操作,非要用些繁琐的位操作。我就不,我就要像飞思卡尔那样操作。。。 于是。。。。。 把我写的下面这个头文件塞到winavr目录的include/avr中,并在io.h头文件的最后包含这个头文件。 嘿嘿,一切变得是那么的亲切与熟悉。。。。。。 /*********************************************************** * 函数库说明:ATMEGE8 * 版本: v1.0
[单片机]
基于飞思卡尔的汽车电子通用嵌入式平台技术方案
方案描述: 本方案提出了一种面向汽车电子领域的通用嵌入式板级支撑平台技术。提出了具体设计,并实现飞思卡尔公司系列微控制器上的板级支撑平台。本平台针对汽车电子的应用特点对底层硬件进行了抽象,使得上层软件的实现与硬件无关,极大的提高了软件的可移植性,并降低了软件开发复杂度同时,由于板级支撑平台的存在,汽车电子应用系统的设计可以摆脱原先的硬件和软件串行开发模式,软件系统在硬件平台设计、调试完成之前即可开始,实现软硬件并行开发,缩短设计开发周期。 方案设计图: 方案关键器件表:
[嵌入式]
基于<font color='red'>飞思卡尔</font>的汽车电子通用嵌入式平台技术方案
跳舞机器人之上位机,其实很简单
通过前两周介绍的小π机器人硬件部分和软件部分,你打造的小π机器人是否已经可以运动起来了?这周小编将主要介绍小π机器人的 上位机 部分,让你可以自由控制自己的小π。小π机器人的上位机部分分为电脑端的上位机软件和手机端的APP。 一、手机APP 1、appinventor简介 App Inventor 原是Google实验室(Google Lab)的一个子计划,由一群Google工程师和勇于挑战的Google使用者共同参与设计完成。Google App Inventor是一个完全在线开发的Android编程环境,抛弃复杂的程式代码而使用积木式的堆叠法来完成开发者的Android程式。除此之外它也正式支持乐高NXT机器人,对于Andr
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved