APP下载

通过I2C总线接口的MCU 固件升级方法

2018-07-11

单片机与嵌入式系统应用 2018年7期
关键词:上拉原理图嵌入式

(珠海市光联通讯技术有限公司 OMS/软件组,珠海 519030)

引 言

嵌入式系统(Embedded system)是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电气工程师协会的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。

Linux是类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统,用C语言写成,符合POSIX标准的类Unix操作系统。

Linux是一款免费的操作系统,用户可以通过网络或其它途径获得,并可以任意修改其源代码,这是其它的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。

Linux内核的主要模块(或组件)分为以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

本系统主机采用的是Linux嵌入式操作系统。

1 系统构成

本系统由主机和从机构成,主机采用嵌入式Linux操作系统,从机为K20 MCU,主、从机之间采用I2C总线通信方式:

从机MCU型号是恩智浦MK20DN512ZVLL10-ND,自带I2C总线接口和SCI接口(备用),通过I2C总线接口与主机通信;通过SCI接口可与PC机通信。

2 系统硬件I2C总线部分原理图

系统硬件I2C总线部分原理图如图1所示。

图1 I2C部分原理图

3 从机MCU firmware升级实现方法

从机MCU firmware升级主要有两种方法:通过PC和通过主机。

方法一:通过PC,该方法在没有主机的情况下大量使用,技术成熟,本文不做详细描述。

从机利用备用的SCI接口,通过PC按XMODEM协议升级下载firmware成功,验证从机代码和firmware升级包都正确。

升级包描述如下:

I2C从设备地址(1byte)FWDATA(6 bytes)0x20(1 byte)Data0……Data31

每包包长度为40个bytes=从设备地址+FWDATA的ASCII码(不分大小写)+0x20+Data0+……+Data31。

方法二:通过主机,系统主机通过I2C总线接口与从

机通信,在发送命令、接收数据等都正常的情况下,主机通过网页界面、I2C总线通信对从机firmware升级,下载失败,下面做详细描述。

用示波器抓SDA波形,正确的和错误的SDA波形比较如下:

① 正常的波形是每个byte后跟ACK(即第9个SCK对应的SDA为0),正确波形如图2所示。

② 从机接收升级数据包时,前8个bytes正常,每个byte后跟一个ACK,即Data0之前的地址、命令(FWDATA)等都正常,从Data0开始到Data31,不定某个位置开始出现NACK,直到stop前一直都是NACK,错误波形如图3所示。

图2 正确波形

图3 错误波形

下面对升级失败原因进行分析:

① 对不同主、从机I2C总线升级结果及波形对比结果如下:

主机S3C2440主机XA9S12从机DSP升级OK,波形如图4-----------从机K20升级NO,波形同DSP升级OK,波形如图5

②两种升级成功的SDA波形比较及有关参数如图4、图5所示。

所采用的改进措施和改进结果比较如下:

① 改硬件上拉电阻,无效,方法如下:去掉从机I2C

总线上拉电阻(图1的R24和R25),波形无改善,升级不成功;去掉从机I2C总线上拉电阻(图1的R24和R25),并且短路图1的U4芯片,波形无改善,升级不成功。

② I2C总线 通信速度由400 kHz降为100 kHz,升级不成功。

③ 配置主机SDA延迟时间(即SDA hold时间)由5clocks改为0,升级通过,但SDA建立时间仍为80 ns,SDA hold时间由200 ns变为100 ns,波形如图6、图7所示。

图4 S3C2440&&DSP(SDA建立时间为80 ns)

图5 XA9S12&&K20(SDA建立时间为460 ns)

图6 SDA延迟5clocks(SDA hold时间为200 ns)

④ 增加SDA建立时间,修改后SDA建立时间由80 ns增加到180 ns,满足I2C总线 datasheet要求,针对上述第3条两种配置,升级都成功。

参考s3c2440A白皮书(图8)以及K20 白皮书(图9)。

图7 SDA延迟0clocks(SDA hold时间为100 ns)

图8 s3c2440A白皮书部分

图9 K20白皮书部分

主机代码做了如下修改,升级成功,I2C总线接口时序符合标准:

① 修改函数static int i2s_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat),增加ndelay(1);//等待建立时间

② 增加ndelay(5)后,SDA建立时间为580 ns,波形如图10所示。

结 语

图10 增加ndelay(5)后波形图

猜你喜欢

上拉原理图嵌入式
高效PDT 终端定位数据上报方法
某车型雾灯偶发点亮故障分析与设计优化
浅谈STM32核心板原理图设计
电路原理图自动布图系统的设计与实现
基于Protel DXP 2004层次原理图的设计
搭建基于Qt的嵌入式开发平台
在老师的葬礼上拉小提琴的男孩
基于Xilinx芯片的FPGA的DONE信号上拉电阻阻值分析
嵌入式软PLC在电镀生产流程控制系统中的应用
关于EDA教学中Quartus II原理图输入法的探讨