说说单片机流行的两个技术ISP和IAP

合集下载

一种基于单片机ISP实现IAP程序升级的电路及方法[发明专利]

一种基于单片机ISP实现IAP程序升级的电路及方法[发明专利]

专利名称:一种基于单片机ISP实现IAP程序升级的电路及方法
专利类型:发明专利
发明人:付涛,王晓春,毕勇冠
申请号:CN202010277620.5
申请日:20200410
公开号:CN111273938A
公开日:
20200612
专利内容由知识产权出版社提供
摘要:本发明涉及一种基于单片机ISP实现IAP程序升级的电路及方法,其解决了现有IAP程序升级方式不足的问题,其设有单片机、ISP暂态使能电路和定时长复位电路,单片机分别与ISP暂态使能电路和定时长复位电路连接,单片机内部设有FLASH区,FLASH区存放固件程序,ISP暂态使能电路驱动单片机重新启动进入ISP状态,升级FLASH区固件程序,定时长复位电路硬件复位单片机,正常运行FLASH区固件程序。

本发明可广泛应于具备电平控制ISP引脚的单片机IAP程序升级。

申请人:威海市天罡仪表股份有限公司
地址:264203 山东省威海市环翠区火炬南路576号
国籍:CN
代理机构:北京怡丰知识产权代理有限公司
代理人:于振强
更多信息请下载全文后查看。

IAP下载

IAP下载

Iap,全名为in applacation programming,即在应用编程,与之相对应的叫做isp,in system programming,在系统编程,两者的不同是isp需要依靠烧写器在单片机复位离线的情况下编程,需要人工的干预,而iap则是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

在工程应用中经常会出现我们的产品被安装在某个特定的机械结构中,更新程序的时候拆机很不方便,使用iap技术能很好地降低工作量.实现iap有两个很重要的前提,首先,单片机程序能对自身的内部flash进行擦写,第二,单片机要有能够和外部进行通讯的方式,无论是网络还是别的方式,只要能传输数据就行通常实现IAP 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。

这两部分项目代码都同时烧录在User Flash 中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:1)检查是否需要对第二部分代码进行更新2)如果不需要更新则转到4)3)执行更新操作4)跳转到第二部分代码执行第一部分代码必须通过其它手段,如JTAG 或ISP 烧入;第二部分代码可以调用第一部分的功能也就是说,将iap和app做成两个程序,这是其中的一种策略,还有一种策略,可以把iap程序和app程序做在一个代码中,但是那样耦合性有点高,我们先进行第一种尝试.要做iap首先我们要知道stm32的启动流程,流程如下1. 单片机从0x80000000位置启动,并将该地址当成系统栈顶地址2. 运行到中断向量表中,默认的中断向量表为0x80000004,该位置存放复位中断3. 跳转到复位中断处理函数当中,进行系统初始化,然后运行main函数当我们准备用iap的时候,单片机内部是有着两套程序的,这个时候我们就需要在iap中和app中分别放置两套中断向量表,当iap代码中将app烧写到flash中之后,跳转到app 的中断向量表中,程序就可以正常执行了,当然需要修改某些系统设置,使得在app和iap阶段单片机可见的中断向量表只能有一套(具体请查看stm32芯片的启动代码)而当需要从app跳转到iap的时候,只需要将app的中断向量表修改成iap的中断向量表,同时主动跳转到iap的reset中断处理程序,这样就能再次开始iap流程.这样,在系统中就需要我们确定几个东西,第一个是iap程序的中断向量表,为0x80000004位置(80000000存放的是msp的初始值),第二个是app程序的中断向量表,该位置需要根据iap程序的长度计算,比如iap占用了64K,那么512K的芯片而言,就还有448K 的空间存放app程序,448K的最开始放置中断向量表,位置就应该是0x08000000+0x10004的位置.Cortex-m3的中断向量并不是在程序中固定的,我们可以通过修改某些寄存器来修改对于当前应用的中断向量表位置.决定中断向量表的寄存器是如下这个通过修改这个寄存器的值,我们可以控制对于当前单片机应用来说可见的向量表的位置(也就说说逻辑上我们有两个向量表,但是同一时间只有一个运行)以上是内核阶段的操作,在此之外我们还需要对stm32的flash进行编程,那么就涉及到删除的编程和擦除操作,这需要参考stm32的闪存编程手册首先,当单片机复位之后,闪存式被锁住的,需要主动去解锁,向FLASH_KEYR写入两个指定的连续键值用于解锁然后将需要写入的闪存擦除,擦除之后在进行写入,写入完成,再次上锁对应的代码如下u16 STMFLASH_BUF[STM_SECTOR_SIZE/2];//最多是2K字节voidSTMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)u32 secpos; //扇区地址u16 secoff; //扇区内偏移地址(16位字计算)u16 secremain; //扇区内剩余地址(16位字计算)u16i;u32 offaddr; //去掉0X08000000后的地址if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*ST M32_FLASH_SIZE)))return;//非法地址FLASH_Unlock(); //解锁offaddr=WriteAddr-STM32_FLASH_BASE; //实际偏移地址.secpos=offaddr/STM_SECTOR_SIZE; //扇区地址0~127 for STM32F103RBT6secoff=(offaddr%STM_SECTOR_SIZE)/2; //在扇区内的偏移(2个字节为基本单位.)secremain=STM_SECTOR_SIZE/2-secoff; //扇区剩余空间大小if(NumToWrite<=secremain)secremain=NumToWrite;//不大于该扇区范围while(1){STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLA SH_BUF,STM_SECTOR_SIZE/2);//读出整个扇区的内容for(i=0;i<secremain;i++)//校验数据{if(STMFLASH_BUF[secoff+i]!=0XFFFF)break;//需要擦除}if(i<secremain)//需要擦除{FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);//擦除这个扇区for(i=0;i<secremain;i++)//复制{STMFLASH_BUF[i+secoff]=pBuffer[i];}STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_BA SE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//写入整个扇区}else STMFLASH_Write_NoCheck(WriteAddr,pBuffer,secremain);//写已经擦除了的,直接写入扇区剩余区间.if(NumToWrite==secremain)break;//写入结束了else//写入未结束{secpos++; //扇区地址增1secoff=0; //偏移位置为0pBuffer+=secremain; //指针偏移WriteAddr+=secremain; //写地址偏移NumToWrite-=secremain; //字节(16位)数递减if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//下一个扇区还是写不完else secremain=NumToWrite;//下一个扇区可以写完了}};FLASH_Lock();//上锁该函数可以实现flash的写入操作,接下来我们需要定义一套通讯协议用于串口数据传输//串口接收缓冲区u8 serial_Buffer[SERIAL_MAX_LENGTH] = {0};//串口接收数据长度u16 serial_Buffer_Length = 0;u8 receiveMode = 0;//接收参数的中断处理模型,为0的时候是命令模式,为1的时候为下载模式u8 receiveExpectCount = 0;//串口期望接收长度//串口中断处理static void SerialRecv(u8 ch){if(receiveMode == 0){if((serial_Buffer_Length&0x8000) == 0x8000)//已经接收完成,系统还没处理{serial_Buffer_Length |= 0x8000;//退出}else if((serial_Buffer_Length&0x4000) == 0x4000)//接收到回车还没接收到换行{if(ch == ‘\n‘)serial_Buffer_Length |= 0x8000;else{//一帧接受失败serial_Buffer_Length = 0;}}else{if((serial_Buffer_Length&0xff) < SERIAL_MAX_LENGTH) {if(ch == ‘\r‘)serial_Buffer_Length |= 0x4000;else{serial_Buffer[(serial_Buffer_Length&0xff)] = ch;serial_Buffer_Length++;}}else{//一帧接受失败serial_Buffer_Length = 0;}}}else{//下载模式,只控制字符串的量,数据的第一位是该数据包的长度,接收到这么多长度,接收完成位置一//注意,在这种模式下,清除serial_Buffer_Length之前应当清除receiveExpectCount的值if(receiveExpectCount == 0)//期望下载为0,第一个数就是期望下载数{receiveExpectCount = ch;}else{if((serial_Buffer_Length&0x8000) == 0x8000)//已经接收完成,系统还没处理,此时不接收数据{serial_Buffer_Length |= 0x8000;//退出}else{serial_Buffer[(serial_Buffer_Length&0xff)] = ch;//接收数据并保存serial_Buffer_Length++;if((serial_Buffer_Length&0xff) == receiveExpectCount)//接收到了期望长度的数据{serial_Buffer_Length |= 0x8000;//一包接收完成标志}}}}}这样系统就能接收数据了,接下来定义五个命令"iap_down""iap_jump_app""iap_over""iap_set_flag""iap_clear_flag"第一个命令为系统开始下载,在这个命令之后上位机就能够将程序数据发下来了,第二个命令为iap跳转到app的跳转指令第三个命令是指示iap完成,将系统缓冲区清空的指令第四个指令为设置app标志,当iap检测到该标志的时候直接跳转到app程序中第五个指令为清除app标志,让iap程序不自动跳转到app程序中,我们分别来看首先是iap_set_flag,其响应函数如下#define APP_CONFIG_ADDR 0X08001FFC //配置地址#define APP_CONFIG_SET_VALUE 0X5555 //设置值#define APP_CONFIG_CLEAR_VALUE 0XFFFF //清零值//设置app固化配置voidiap_set_flag_s(void){Test_Write(APP_CONFIG_ADDR,APP_CONFIG_SET_VALUE);printf("ok\r\n");}我们使用0x08000000-0x08003000来存放iap代码,并将0X08001FFC作为存放app固化标志的地方//清除app固化配置voidiap_clear_flag(void)Test_Write(APP_CONFIG_ADDR,APP_CONFIG_CLEAR_VALUE);printf("ok\r\n");}对iap_jump2app命令的响应如下//跳转到应用程序段//appxaddr:用户代码起始地址.voidiap_load_app(u32 appxaddr){if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.0x20000000是sram的起始地址,也是程序的栈顶地址{printf("ok\r\n");Delay_Ms(10);jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)jump2app(); //跳转到APP.else{printf("program in flash is error\r\n");}}//跳转到app区域运行voidiap_jump_app_s(void){iap_load_app(FLASH_APP1_ADDR);//跳转到app的复位向量地址}接下来就是iap_down,用于下载的核心算法#define FLASH_APP1_ADDR 0x08002000 //第一个应用程序起始地址(存放在FLASH)//保留的空间为IAP使用u16 iapbuf[1024] = {0}; //用于缓存数据的数组u16 receiveDataCur = 0; //当前iapbuffer中已经填充的数据长度,一次填充满了之后写入flash并清零u32 addrCur = FLASH_APP1_ADDR; //当前系统写入地址,每次写入之后地址增加2048//开始下载voidiap_down_s(void){u16i = 0;u16 temp = 0;u16receiveCount;printf("begin,wait data download\r\n");receiveMode = 1;//串口进入下载接收数据模式while(1){//循环接收数据,每次必须要发128个数据下来,如果没有128,说明这是最后一包数据//接收到一包数据之后,返回一个小数点,发送完成,系统编程完成之后返回一个iap_over if(serial_Buffer_Length& 0x8000){receiveCount = (u8)(serial_Buffer_Length&0x00ff);if(receiveCount == 128)//满足一包,填充并查看是否有了1024字节,有了写入闪存{for(i = 0; i<receiveCount; i+=2){//数据八位融合为16位temp = (((u16)serial_Buffer[i+1])<<8) + ((u16)serial_Buffer[i]);iapbuf[receiveDataCur] = temp;receiveDataCur++;//完成之后receiveDataCur++;}receiveExpectCount = 0;//清除期望接收模式serial_Buffer_Length = 0;//清除串口满标志printf(".");//每次接受一次数据打一个点//此时需要检测receiveDataCur的值,要是放满了,就需要写入if(receiveDataCur == 1024){//写入flash中STMFLASH_Write(addrCur,iapbuf,1024);//printf("\r\nwriteaddr %x,length 1024\r\n",addrCur);addrCur += 2048;//地址+2048//写完之后receiveDataCur要清零等待下一次传输receiveDataCur = 0;}else //有可能最后一包有128个数据但是最终没有2048个数据,此时扩展一个指令用于完成最后一个的写入{}//还没放满,等待下一次数据过来}else //不满足一包,说明数据传送这是最后一包,写入闪存{//没有一包也要传送到缓存中for(i = 0; i<receiveCount; i+=2){//数据八位融合为16位temp = (((u16)serial_Buffer[i+1])<<8) + ((u16)serial_Buffer[i]);iapbuf[receiveDataCur] = temp;receiveDataCur++;//完成之后receiveDataCur++;}receiveExpectCount = 0;//清除期望接收模式serial_Buffer_Length = 0;//清除串口满标志printf(".");//每次接受一次数据打一个点//之后就要将这数据写入到闪存中STMFLASH_Write(addrCur,iapbuf,receiveDataCur);//将最后的一些内容字节写进去.//printf("\r\nwriteaddr %x,length %d\r\n",addrCur,receiveDataCur);//写完之后要把地址恢复到原来的位置addrCur = FLASH_APP1_ADDR;receiveDataCur = 0;//写完之后要退出下载循环并告诉上位机,已经下载完了printf("download over\r\n");//同时,也要退出下载循环模式receiveMode = 0;return;}这段代码的核心思想是上位机每次发送128个数据下来,发满了2048个写一次flash,当最后一包数据不是128的时候说明数据发送完成了,这时候退出下载模式,但是当遇到最后一包数据也是128个时候怎么办呢,于是定义了这个指令iap_over,上位机侦测到最后一包数据也是128个的时候补充发送该命令,下位机将缓存写入并退出//最后一包有128个数据但是最终没有2048个数据//收到这个指令检测receiveDataCur和addrCur的值,//完成最后的写入voidiap_over_s(void){//这个时候,依然在串口下载模式if(receiveDataCur != 0){STMFLASH_Write(addrCur,iapbuf,receiveDataCur);//将最后的一些内容字节写进去.//printf("write addr %x,length %d",addrCur,receiveDataCur);addrCur = FLASH_APP1_ADDR;receiveDataCur = 0;//同时,也要退出下载模式receiveMode = 0;}printf("ok\r\n");}这是iap的核心代码,接下来我们在main函数中检测app固化标志,如果标志位设置,那么跳转到appif(STMFLASH_ReadHalfWord(APP_CONFIG_ADDR) == 0x5555){//直接跳转到APPiap_jump_app_s();}到这里基本上就完成了iap的工作,可是想想,还需要设置一个地方,我们要在target中设置使用的flash空间,不能超范围,如下如果需要flash下载的话还需要设置jlink的flash下载设置如下.这样可以直接使用jlink将代码下载到单片机中,而且不会影响原先的app程序,注意,要选择erase sector used,不能全部擦除flash桥斗麻袋,我们忘了一件事情,假设我们设置了app标志,那及时app能跳转到iap中,iap 岂不是马上会跳转回app,永远不能等待下载?解决办法就是我们在app中app跳转到iap的指令中将app固化标志清除掉,在app代码中添加一条指令Iap,其响应方法为__asm void MSR_MSP(u32 addr){MSR MSP, r0 //set Main Stack valueBX r14}voidiap_jump(u32 iapxaddr){if(((*(vu32*)iapxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.0x20000000是sram的起始地址,也是程序的栈顶地址{printf("ok\r\n");Delay_Ms(10);jump2iap=(iapfun)*(vu32*)(iapxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)MSR_MSP(*(vu32*)iapxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)jump2iap(); //跳转到APP.}else{printf("iap program loss,please check\r\n");}}#define APP_CONFIG_ADDR 0X08001FFC //配置地址#define APP_CONFIG_SET_VALUE 0X5555 //设置值#define APP_CONFIG_CLEAR_VALUE 0XFFFF //清零值voidiap_Func(void){Test_Write(APP_CONFIG_ADDR,APP_CONFIG_CLEAR_VALUE);iap_jump(FLASH_IAP_ADDR);//跳转到iap的复位向量地址}可以看到,我们先清除了app标志,然后在跳转到iap程序中,就不会影响到iap的流程了,同时app代码也还在单片机里面,另外,app工程里面也要设置两个东西因为flash的起始地址为0x08000000,而我们用了之前2000的空间作为iap代码空间,那么,app代码的起始空间就变成了0x8002000,还有一个下载界面需要设置红框部分也要修改.是不是没有说中断向量表的问题,在iap中我们不需要考虑中断向量表,因为默认就是在0x8000000位置的,但是在app中代码的起始位置变了,必须重新设置中断向量表在system_stm32f10x.c中有一个system_init函数,该函数被启动代码调用,配置系统时钟,在该函数中的最后一句为#ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */#elseSCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */#endif其中VECT_TAB_OFFSET就是我们要定义的偏移量,也就是app程序的起始地址偏移,我们知道是2000,那么该值的宏就需要修改,在大约128行的位置//此处为flash偏移地址,app应当修改这个地址#define VECT_TAB_OFFSET 0x2000 /*!< Vector Table base offset field.This value must be a multiple of 0x200. */嗯,完整流程就是这样了,另外,该工程分为三个部分,一个iap,一个app,还有一个当然是下载程序啦,下载程序是这样的三个代码的工程我会打包上传到csdn,想更深入了解的可以下载来看看,软件用mfc编写的最后,下载需要使用bin文件,该文件的生成方法参考另一篇博文,lpc1768-iap 代码打包上传地址/detail/dengrengong/8499911。

STC系列单片机程序烧录方法

STC系列单片机程序烧录方法

STC系列单片机程序烧录方法STC系列单片机(例如STC89C51系列)是一种广泛使用的单片机系列,它具有低成本、易于使用和良好的性能特点,因此在各种嵌入式系统中都有广泛的应用。

在使用STC系列单片机时,我们需要将程序烧录到芯片中,下面是一种常用的STC系列单片机程序烧录方法。

1.硬件准备在进行STC系列单片机程序烧录之前,首先需要准备相应的硬件设备。

我们需要一个烧录器以及与之相配套的连接线。

常用的烧录器有STC-ISP、USB-ISP等,其中STC-ISP烧录器是STC系列单片机官方推荐的烧录器,使用起来非常方便。

2.确定烧录模式STC系列单片机有两种烧录模式,分别是ISP烧录模式和IAP烧录模式。

ISP烧录模式可以通过外部烧录器直接连接到单片机的烧录口进行烧录。

IAP烧录模式可以通过串口等外部设备来进行烧录。

在进行烧录之前,需要确定使用哪种烧录模式,并将单片机设置为对应的烧录模式。

3.连接烧录器与单片机将烧录器通过连接线连接到单片机的烧录口上。

烧录器的引脚与单片机的烧录口引脚相对应,需要一一对应地连接。

4.打开烧录软件使用STC系列单片机官方提供的烧录软件(STC-ISP烧录器对应的软件为STC-ISP程序),打开烧录软件,进入烧录界面。

5.设置烧录参数在烧录软件的烧录界面上,设置烧录参数。

选择所使用的烧录器型号、芯片型号以及烧录模式等。

确保选择正确的型号和模式。

6.选择待烧录的程序文件在烧录软件的烧录界面上,选择待烧录的程序文件。

通常程序文件的扩展名为.hex。

7.擦除芯片在烧录软件的烧录界面上,选择擦除芯片的操作。

将待烧录的程序文件烧录到芯片之前,需要先擦除芯片中原有的程序。

8.开始烧录在烧录软件的烧录界面上,点击“开始烧录”按钮,开始进行程序的烧录。

烧录过程中,烧录软件会将程序文件的指令逐条发送给烧录器,然后由烧录器将指令写入芯片的存储器中。

9.烧录完成烧录过程完成后,烧录软件会弹出烧录成功的提示框。

单片机中的网络通信技术

单片机中的网络通信技术

单片机中的网络通信技术网络通信技术在现代社会中起着举足轻重的作用,不仅在计算机等大型设备中应用广泛,而且在嵌入式系统中也扮演着重要角色。

尤其是在单片机领域,网络通信技术的应用为传感器网络、智能家居等领域开辟了广阔的发展空间。

本文将探讨单片机中的网络通信技术,包括其原理、应用以及未来的发展趋势。

一、网络通信技术原理在单片机中使用的网络通信技术一般分为有线和无线两种类型。

有线网络通信技术常用的有以太网、串口通信等,而无线网络通信技术则包括蓝牙、Wi-Fi、ZigBee等。

无论是有线还是无线通信,其基本原理都是实现数据的传输和接收。

有线通信技术中,以太网是最常见的一种。

它通过物理层和数据链路层完成数据传输,使用RJ45接口将单片机与网络连接,将数据以数据帧的形式传输。

串口通信则采用串行通信的方式,将数据一个一个地传输,常见的有RS232和RS485。

无线通信技术中,蓝牙是广泛应用的一种技术。

它通过无线电波进行数据传输,常用于手机与周边设备的连接。

Wi-Fi则是无线局域网的一种技术,通过无线电波将数据传输到局域网中的其他设备。

ZigBee 是一种低功耗、近距离的无线通信技术,适用于物联网等领域。

二、单片机中的网络通信应用单片机中的网络通信技术广泛应用于各个领域,为嵌入式系统的智能化提供了支持。

以下是几个常见的应用案例:1. 传感器网络:通过无线网络通信技术,将传感器节点连接起来,实现数据的采集和传输。

这种应用在农业、环境监测等领域有着广泛的应用,实现了数据的实时监测和远程控制。

2. 智能家居:通过网络通信技术,将家居设备进行互联,实现远程控制和智能化管理。

比如通过手机App远程控制家里的灯光、空调等设备,提高了生活的便利性和舒适度。

3. 工业控制:单片机中的网络通信技术可以应用于工业控制系统中,实现分布式控制和远程监测。

传感器节点和执行器节点通过网络连接,实现工控系统的自动化控制。

三、单片机网络通信技术的发展趋势随着物联网的发展,单片机中的网络通信技术也在不断进步和演进。

单片机程序烧录的3种方式(ISP、ICP、IAP)是什么

单片机程序烧录的3种方式(ISP、ICP、IAP)是什么

单片机程序烧录的3种方式(ISP、ICP、IAP)是什么说起给单片机烧录程序,大家应该都不陌生吧,我最早接触单片机是从51单片机开始的,型号是STC89C52RC,当时烧录程序就是用的下面这种烧录软件——STC-ISP。

这种方式,通过串口连接单片机,选择一个合适的波特率就可以烧录了。

后来学习STM32,编程时使用KEIL软件自带的下载按钮就能下载程序,方便了不少,但需要额外使用J-Link等下载器。

再后来,接触到产品研发,给已经发布出的产品升级,都是要靠远程无线升级的(想想看,产品已经到客户那里了,当软件需要升级时,要是还使用有线的方式烧录程序,得有多麻烦)既然给单片机烧录程序的方式有多种,那烧录方式具体怎么分类呢?可以分为3种:ISP(In-System Programming)在系统编程,使用引导程序(Bootloader)加上外围UART/SPI等接口进行烧录。

ICP (In-circuit programmer)在电路编程,使用SWD/JTAG接口。

IAP(In-Application Programming)指MCU可以在系统中获取新代码并对自己重新编程,即用程序来改变程序。

这3种烧录方式的原理是什么呢?在分析原理之前,需要先了解一下单片机Flash的访问地址,看看程序是烧录到哪个位置了。

单片机Flash在地址映射表中位置下图是一张STM32F4xx的地址映射表,从0x0000 0000到0xFFFF FFFF,总计4Gbyte。

单片机的片上Flash、片上RAM、片上外设以及外部扩展接口的访问地址,都被映射到这4Gbyte的范围之内。

这张图中,我们需要先注意下半部分Main memory 主存储区通常,我们编写的代码,是放到主存储区的起始位置(0x0800 0000)开始运行的,烧录程序时,直接将程序烧录到这里即可(KEIL 软件给STM32烧录程序的默认烧写地址就是0x0800 0000开始)System memory系统存储区System memory(起始位置0x1FFF 000)是STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。

关于I2C、UART、SPI、RS232、JTAG_ISP、概念和理解

关于I2C、UART、SPI、RS232、JTAG_ISP、概念和理解

一、UART总线和硬件结构--Universal Asynchronous Receiver/TransmitterUART是一种通用异步串行数据总线,该总线双向通信,可以实现全双工传输和接收。

因为计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输。

串行的两条线 TXD --- UART数据发送,RXD --- UART数据接收UART通用异步接收/发送装置,是一个并行输入成为串行输出的芯片,它是用于控制计算机与串行设备的芯片,通常集成在主板上,多数是16550AFN芯片。

,有一点要注意的是,它提供了RS-232C数据终端设备接口 ,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信,所以说UART是一种异步串行全双工总线,硬件映射为一个芯片,可以与使用RS-232接口的设备直接通信二、I2C总线和硬件结构------Inter-Integrated CircuitI2C是一种一种同步两线式串行数据总线,由PHILIPS公司1992 年开发的,I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。

所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上,用于连接微控制器及其外围设备,一般在对芯片进行扩展中是使用,通用I/O端口也可以作为I2C总线接口。

所以说I2C是一种同步串行半双工总线,硬件映射为一个两个接口电路,对于没有I2C总线接口的,可以使用通用I/O端口来实现I2C的功能与其他设备进行通信(根据协议编写程序)三、SPI总线和硬件结构------Serial Peripheral Interface高速同步串行口,是一种标准的四线同步双向串行总线,一种四线同步总线系统,一种同步串行外设接口,为全双工通信,是Motorola 公司推出的一种同步串行通讯方式,它可以使MCU与各种外围设备以串行方式进行通信以交换信息在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,该接口一般使用4条线:(1 )MOSI –主器件数据输出,从器件数据输入(2)MISO –主器件数据输入,从器件数据输出(3)SCLK –时钟信号,由主器件产生(4)/SS –从器件使能信号,由主器件控制 (有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI) 所以说,SPI是同步串行全双工总线,硬件映射为四个接口四、RS-232接口(DB9)是现在主流的串行通信接口之一,传输速率较低,在异步传输时,波特率为20Kbps.接口硬件为9针功能如下: 1 DCD 载波检测 2 RXD 接收数据 3 TXD 发送数据 4 DTR 数据终端准备好 5 SG 信号地6 DSR 数据准备好7 RTS 请求发送8 CTS 允许发送9 RI 振铃提示还有两个接地线10、11(不是针)串口通信一般用2、3、7、8通信,5、(10、11)接地,其他不用,特别的作为debug口7、8也不用五、COM接口即串行通讯端口。

单片机常见接口技术及其特点分析

单片机常见接口技术及其特点分析

单片机常见接口技术及其特点分析在现代电子设备中,单片机是一种非常重要的组成部分。

单片机通过与周围设备的接口实现数据的输入和输出,从而完成各种功能。

本文将对单片机常见接口技术及其特点进行分析,为读者提供基础知识和理解。

一、串口接口串口接口是一种常见的单片机通信接口技术。

串口通过发送和接收数据来实现与外部设备的通信。

串口可以分为同步串口和异步串口两种类型。

同步串口是指发送和接收数据使用相同的时钟信号的接口。

同步串口使用时钟信号的上升沿或下降沿来确定数据的传输时间点,因此在传输速度方面具有较高的优势。

然而,同步串口的设计和实现要求更高,稳定性较差,成本较高。

同步串口主要用于对传输速度要求较高的场合,如音频和视频数据传输。

异步串口是指发送和接收数据使用不同的时钟信号的接口。

异步串口通过在数据帧中加入起始位和停止位来确定数据的传输时间点。

异步串口的设计和实现相对简单,稳定性较好,成本较低。

然而,异步串口在传输速度方面相对较慢,通常用于对传输速度要求不是特别高的场合。

二、并口接口并口接口是一种单片机和外部设备之间的并行通信接口技术。

并口接口通过同时发送和接收多个数据位来实现高速的数据传输。

并口接口的特点是传输速度快、数据位数多。

并口接口常用于需要高速数据传输的场合,如打印机和显示器等外设连接。

并口接口的设计和实现相对简单,通常可以直接通过硬件连接来实现。

三、I2C接口I2C接口是一种常见的串行通信接口技术。

I2C接口通过两根信号线(串行数据线SDA和串行时钟线SCL)来实现单片机与外部设备之间的通信。

I2C接口的特点是使用两根信号线实现数据传输,节省了硬件资源。

同时,I2C 接口可以连接多个设备,通过地址区分不同的设备,实现多设备之间的通信。

I2C 接口在低速通信和少量设备连接的应用场景中表现出较好的性能,常用于传感器、存储器和其他外设的连接。

四、SPI接口SPI接口是一种常用的串行通信接口技术。

SPI接口通过四根信号线(串行数据线MOSI、串行数据线MISO、串行时钟线SCLK和片选线SS)来实现单片机与外部设备之间的通信。

jtag、isp和iap的区别(比较全面)以avr为例【优质】

jtag、isp和iap的区别(比较全面)以avr为例【优质】

首先申明,百度文库中已经有这篇文章/view/1f20b58302d276a200292e13.html,只不过它的题目不是很全面,可能让很多人找不到这篇文章。

所以,我修改了一下题目和里面比较晃眼的字体。

JTAG与ISP下载区别2010-06-25 10:26:03| 分类:单片机阅读45 评论0 字号:大中小订阅JTAG是Joint Test Action Group(联合测试行动小组)的缩写,是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。

JTAG用来对芯片进行测试的基本原理是在器件内部定义一个TAP(Test Access Port;测试访问口)通过专用的JTAG测试工具对内部节点进行测试。

标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。

TMS:测试模式选择。

此引脚用来实现TAP 控制器各个状态之间的切换。

TCK:测试时钟。

JTAG 操作是与TCK 同步的。

TDI:测试数据输入--需要移位到指令寄存器或数据寄存器(扫描链)的串行输入数据。

TDO:测试数据输出-- 自指令寄存器或数据寄存器串行移出的数据。

现在,JTAG接口还常用于实现ISP(In-System Programmable;在线编程),对EEPROM、FLASH等器件进行编程和在线调试。

JTAG编程方式是在线编程,传统开发流程中先对芯片进行预编程再装到板上的模式因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。

AVR 的JTAG功能(只有部分型号才有)使得AVR的调试工作非常简单,可以通过JTAG 接口对Flash、EEPROM、熔丝位和锁定位进行编程。

使用AVR studio软件和JTAG硬件(AVR JTAG编程器,AVR JTAG仿真器)可以进行程序下载(亦即编程)和程序在线调试。

通过JTAG功能,工程师可以方便的观察各个寄存器的变化和程序的运行情况,十分适合单片机的学习与系统开发。

ipa学习资料

ipa学习资料

/************************************************************* ***********************************************************//*ISP/IAP相关寄存器列表*//*名称地址功能描述D7D6D5D4D3D2D1D0复位值*//*ISP_DATAE2hFlash数据寄存器1111 1111*//*ISP_ADDRHE3hFlash高字节地址寄存器0000 0000*//*ISP_ADDRLE4hFlash低字节地址寄存器0000 0000*//*ISP_CMDE5hFlash命令模式寄存器----------MS2MS1MS0xxxx x000*//*ISP_TRIGE6hFlash命令触发寄存器xxxx xxxx*//*ISP_CONTRE7hISP/IAP 控制寄存器ISPENSWBSSWRST----WT2WT1WT0000x x000*//************************************************************* ***********************************************************//************************************************************* ***********************//* ISP_CMD寄存器模式设置*//* D7D6D5D4D3D2D1D0模式选择*//* 保留命令选择*//* ----------000待机模式,无ISP操作*//* ----------001对用户的应用程序flash区及数据flash区字节读*//* ----------010对用户的应用程序flash区及数据flash区字节编程*//* ----------011对用户的应用程序flash区及数据flash区扇区擦除*//************************************************************* ***********************//*在ISPEN(ISP_CONTR.7) =1时,对ISP_TRIG 先写入46h,再写入B9h,ISP/IAP 命令才会生效。

单片机常见英文缩写(一)

单片机常见英文缩写(一)

单片机常见英文缩写(一)引言概述:在单片机领域,英文缩写在文档和代码中经常被使用。

本文将介绍单片机常见的英文缩写,让读者更好地理解和应用单片机技术。

本文包括五个大点:处理器相关缩写、外设相关缩写、通信相关缩写、存储器相关缩写以及其他相关缩写。

正文内容:一、处理器相关缩写:1. CPU:中央处理器,负责执行计算机的指令。

2. ALU:算术逻辑单元,执行算术和逻辑运算。

3. PC:程序计数器,存储当前指令的地址。

4. SP:堆栈指针,指向堆栈的当前位置。

5. ISR:中断服务程序,用于处理中断事件。

二、外设相关缩写:1. UART:通用异步收发传输器,实现串行通信。

2. LCD:液晶显示器,用于图形和文本显示。

3. LED:发光二极管,用于指示器和状态显示。

4. ADC:模拟数字转换器,将模拟信号转换为数字信号。

5. PWM:脉宽调制,用于控制电机速度和亮度。

三、通信相关缩写:1. I2C:串行总线,用于连接微控制器和外设。

2. SPI:串行外设接口,用于高速全双工通信。

3. CAN:控制器区域网络,用于实时通信和控制。

4. USB:通用串行总线,用于连接计算机和外设。

5. RF:无线射频,用于无线通信和远程控制。

四、存储器相关缩写:1. RAM:随机存取存储器,用于暂时存储数据。

2. ROM:只读存储器,存储固定的数据和程序。

3. EEPROM:可擦写可编程只读存储器,用于存储非易失性数据。

4. Flash:闪存,用于存储程序和数据。

5. SD:安全数码卡,用于存储和传输数据。

五、其他相关缩写:1. IDE:集成开发环境,提供软件开发工具。

2. ISP:在线编程,通过通信接口对单片机进行编程。

3. BJT:双极性晶体管,用于电子开关和放大器。

4. FPGA:现场可编程门阵列,用于实现数字逻辑电路。

5. MCU:微控制器,集成了处理器、存储器和外设的芯片。

总结:本文介绍了单片机常见的英文缩写,包括处理器、外设、通信、存储器以及其他相关的缩写。

单片机与外部设备通信接口技术解析

单片机与外部设备通信接口技术解析

单片机与外部设备通信接口技术解析在嵌入式系统中,单片机与外部设备之间的通信接口技术起着至关重要的作用。

它允许单片机与各种外部设备进行数据交换,实现设备之间的信息传输和控制。

本文将介绍几种常见的单片机与外部设备通信接口技术,并对其原理和特点进行详细分析。

一、串行通信接口串行通信接口是一种逐位传输数据的通信方式,它通过单根信号线传输数据,降低了通信线的数量和复杂度。

常见的串行通信接口有UART(通用异步收发器)和SPI(串行外设接口)。

UART是一种全双工的串行通信接口,它通过单根传输线实现数据的发送和接收。

UART的原理是将数据按照一定的波特率转换成连续的电平信号,在传输过程中需要使用起始位、数据位、停止位和校验位进行数据的同步和校验。

UART通信速率较低,适用于较简单的通信应用。

SPI是一种全双工的串行通信接口,它采用4根信号线实现数据的传输,包括主时钟线、主输出从输入线、主输入从输出线和片选信号线。

SPI的工作方式是由主设备控制通信的时序,通过主时钟线同步数据传输。

SPI通信速率较高,支持多种设备的连接,适用于高速数据传输和控制应用。

二、并行通信接口并行通信接口是一种同时传输多位数据的通信方式,它通过多根信号线同时传输数据,提高了通信的速度和效率。

常见的并行通信接口有I2C(串行双线通信接口)和GPIO(通用输入输出)。

I2C是一种半双工的串行通信接口,它通过两根信号线实现多个设备之间的通信,包括串行数据线(SDA)和串行时钟线(SCL)。

I2C通信的原理是由主设备发送开始信号和结束信号,通过地址和数据进行设备的选择和数据的传输。

I2C通信速率较低,适用于需要连接多个设备的场景。

GPIO是一种通用的数字输入输出接口,它可以通过编程控制单片机的引脚状态和电平变化。

GPIO通信的原理是通过将引脚设置为输入或输出模式,通过读取或写入引脚的状态来实现数据的输入和输出。

GPIO通信速率较低,适用于简单的控制和信号传输。

单片机常用英文缩写全称

单片机常用英文缩写全称

单片机常用英文缩写全称单片机(Microcontroller,简称MCU)是一种集成了处理器、存储器和外设功能的微型计算机系统。

它常被用于各种电子设备中,如家电、工业控制、汽车电子等。

在单片机领域中,有许多常用的英文缩写用于表示不同的功能模块和技术,下面将介绍一些常用的单片机英文缩写全称。

1. MCU - Microcontroller Unit(微控制器单元)MCU是单片机的常用缩写,它指的是整个单片机系统,包括中央处理器(CPU)、内存和各种外设。

2. CPU - Central Processing Unit(中央处理器)CPU是单片机中最核心的部分,负责执行指令和控制系统的操作。

3. RAM - Random Access Memory(随机存取存储器)RAM是用于临时存储数据的内存,它可以被CPU快速访问。

4. ROM - Read-Only Memory(只读存储器)ROM是单片机中的一个存储器类型,它存储了程序和数据,不允许对其进行修改。

5. EEPROM - Electrically Erasable Programmable Read-Only Memory (电可擦可编程只读存储器)EEPROM是一种可擦写的存储器,它可以多次擦除和编程,用于存储非易失性数据。

6. I/O - Input/Output(输入/输出)I/O指单片机与外部设备之间的数据交换接口,用于输入和输出数据。

7. ADC - Analog-to-Digital Converter(模数转换器)ADC用于将模拟信号转换为数字信号,以便单片机进行处理。

8. DAC - Digital-to-Analog Converter(数模转换器)DAC用于将数字信号转换为模拟信号,以便控制外部设备或输出模拟信号。

9. PWM - Pulse Width Modulation(脉宽调制)PWM是一种调节电平的技术,用于控制电流、电压或频率。

(完整版)单片机原理及应用习题答案(第三版)

(完整版)单片机原理及应用习题答案(第三版)

第一章习题参考答案1-1 :何谓单片机?与通用微机相比,两者在结构上有何异同?答:将构成计算机的基本单元电路如微处理器 (CPU) 、存储器、 I/O 接口电路和相应实时控制器件等电路集成在一块芯片上,称其为单片微型计算机,简称单片机。

单片机与通用微机相比在结构上的异同:(1)两者都有 CPU,但通用微机的 CPU主要面向数据处理,其发展主要围绕数据处理功能、计算速度和精度的进一步提高。

例如,现今微机的CPU都支持浮点运算,采用流水线作业,并行处理、多级高速缓冲 (Cache) 技术等。

CPU的主频达到数百兆赫兹 (MHz) ,字长普遍达到 32 位。

单片机主要面向控制,控制中的数据类型及数据处理相对简单,所以单片机的数据处理功能比通用微机相对要弱一些,计算速度和精度也相对要低一些。

例如,现在的单片机产品的 CPU大多不支持浮点运算, CPU还采用串行工作方式,其振荡频率大多在百兆赫兹范围内;在一些简单应用系统中采用 4 位字长的CPU,在中、小规模应用场合广泛采用8位字长单片机,在一些复杂的中、大规模的应用系统中才采用 16 位字长单片机, 32 位单片机产品目前应用得还不多。

(2)两者都有存储器,但通用微机中存储器组织结构主要针对增大存储容量和CPU 对数据的存取速度。

现今微机的内存容量达到了数百兆字节 (MB),存储体系采用多体、并读技术和段、页等多种管理模式。

单片机中存储器的组织结构比较简单,存储器芯片直接挂接在单片机的总线上, CPU对存储器的读写按直接物理地址来寻址存储器单元,存储器的寻址空间一般都为 64 KB 。

(3)两者都有 I/O 接口,但通用微机中 I/O 接口主要考虑标准外设 ( 如 CRT、标准键盘、鼠标、打印机、硬盘、光盘等 ) 。

用户通过标准总线连接外设,能达到即插即用。

单片机应用系统的外设都是非标准的,且千差万别,种类很多。

单片机的I/O 接口实际上是向用户提供的与外设连接的物理界面。

ISP和IAP区别

ISP和IAP区别

ISP和IAP区别ISP和IAP区别2011-02-19 17:30:13| 分类:基本概念理解| 标签:isp iap 编程单片机代码|字号大中小订阅ISP与IAP的区别ISP :in system programming,在系统编程IAP :in applicatin programming 在应用编程但两者的操作方式,结果和应用场合有什么区别什么是ISP :用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;什么是IAP :在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;应用场合:1,ISP 程序升级需要到现场解决,不过好一点的是不必拆机器了;2,IAP 如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去;这可能是他们的优点或应用吧在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。

ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。

ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。

ISP和IAP很相似,都是不需要把芯片从板子上拔出来,就达到了用PC-MCU的编程接口(JTAG、串口、双绞线、SPI等)搞定新版本的升级的目的。

单片机中常见的接口类型及其功能介绍

单片机中常见的接口类型及其功能介绍

单片机中常见的接口类型及其功能介绍单片机(microcontroller)是一种集成了中央处理器、内存和各种外围接口的微型计算机系统。

它通常用于嵌入式系统中,用于控制和监控各种设备。

接口是单片机与外部设备之间进行数据和信号传输的通道。

本文就单片机中常见的接口类型及其功能进行介绍。

一、串行接口1. 串行通信口(USART):USART是单片机与外部设备之间进行串行数据通信的接口。

它可以实现异步或同步传输,常用于与计算机、模块、传感器等设备进行数据交换。

2. SPI(串行外围接口):SPI接口是一种全双工、同步的串行数据接口,通常用于连接单片机与存储器、传感器以及其他外围设备。

SPI接口具有较高的传输速度和灵活性,可以实现多主多从的数据通信。

3. I2C(Inter-Integrated Circuit):I2C接口是一种面向外部设备的串行通信总线,用于连接不同的芯片或模块。

I2C接口通过两条双向线路进行数据传输,可以实现多主多从的通信方式,并且占用的引脚较少。

二、并行接口1. GPIO(通用输入/输出):GPIO接口是单片机中最常见的接口之一,用于连接与单片机进行输入输出的外围设备。

通过设置相应的寄存器和引脚状态,可以实现单片机对外部设备进行控制和监测。

2. ADC(模数转换器):ADC接口用于将模拟信号转换为数字信号,常用于单片机中对模拟信号的采集和处理。

通过ADC接口,单片机可以将外部传感器等模拟信号转化为数字信号,便于处理和分析。

3. DAC(数模转换器):DAC接口用于将数字信号转换为模拟信号。

通过DAC接口,单片机可以控制外部设备的模拟量输出,如音频输出、电压控制等。

三、特殊接口1. PWM(脉冲宽度调制):PWM接口用于产生特定占空比的脉冲信号。

通过调节脉冲的宽度和周期,可以控制外部设备的电平、亮度、速度等。

PWM接口常用于控制电机、LED灯、舵机等设备。

2. I2S(串行音频接口):I2S接口用于在单片机和音频设备之间进行数字音频数据传输。

SST89C系列单片机ISPIAP功能的实现共5页文档

SST89C系列单片机ISPIAP功能的实现共5页文档

SST89C系列单片机ISPIAP功能的实现如今单片机在电子领域的应用已经相当普遍,在高校大多数的工科专业也开设了相应的单片机课程,而且以C51单片机居多,因此单片机实验室从实用和方便的角度出发,大多数就采用SST89C××型号的单片机,因为该型单片机同时具有ISP/IAP功能。

当然,该型单片机也存在不足,那就是该型单片机很容易发生ISP/IAP监控程序损坏的情况,从而导致单片机无法正常工作,那么怎样来修复这种软故障,这就是该文所要讨论的内容。

1 ISP/IAP概念及联系1.1 ISP概念ISP(In System Programing),即在系统编程。

ISP是指可以在板级上进行编程,而不用把芯片拆下来放到烧写器中,即不脱离系统,所以称作“在系统编程”,它是对整个程序的擦除和写入,通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程。

即使芯片焊接在电路板上,只要留出和上位机接口的串行口就能进行烧写。

ISP的在线下载需要适当的辅助电路才能实现。

1.2 IAP概念IAP( In applicating Programing),在应用编程。

IAP同样是在板级上进行编程,MCU获取新代码并对程序的某部分重新编程,即可用程序来改变程序,修改程序的一部分达到升级、消除bug的目的,而不影响系统的其它部分,烧写过程中程序可以继续运行,这样可以进行远程升级而不影响应用。

IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。

IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。

1.3 ISP/IAP联系实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到数据存储区。

SPI和I2C接口技术在单片机系统中的比较与选择

SPI和I2C接口技术在单片机系统中的比较与选择

SPI和I2C接口技术在单片机系统中的比较与选择概述:在单片机系统中,SPI(Serial Peripheral Interface)和I2C(Inter-Integrated Circuit)是两种常用的串行通信接口技术。

它们被广泛应用于各种嵌入式系统中,包括传感器、设备和外设之间的通信。

本文将对SPI和I2C接口技术进行比较,并探讨在不同情景下的选择。

一、SPI接口技术SPI是一种同步串行通信协议,允许单片机与多个外围设备进行双向通信。

SPI 接口使用了四条信号线:SCLK(时钟线)、MOSI(主机数据输出从机数据输入线)、MISO(主机数据输入从机数据输出线)和SS/CS(片选/使能信号线)。

使用SPI接口的主要优点如下:1. 高速:SPI接口能够达到很高的传输速率,有助于实现实时数据传输和高速操作。

2. 简单:SPI接口的硬件和软件实现相对简单,易于使用和调试。

3. 多从机支持:SPI支持主机与多个从机之间的通信,可以控制多个外围设备。

4. 数据传输可靠性:SPI接口在传输数据时具有很高的可靠性和稳定性。

然而,SPI接口也有一些限制和缺点:1. 连接数限制:SPI接口对于从机数量有一定限制,通常只能连接少量的外围设备。

2. 复杂性:虽然SPI接口的硬件实现比较简单,但在多从机情况下,软件实现可能更加复杂。

3. 电线数量:SPI接口需要四条信号线,这可能限制了系统设计的灵活性。

4. 电线长度:SPI接口的传输距离受限于电线长度并且容易受到传输信号的干扰。

二、I2C接口技术I2C接口是一种串行双向通信协议,也被称为TWI(Two Wire Interface)。

它使用了两条信号线:SCL(时钟线)和SDA(数据线)。

I2C接口可以实现多个从机与单个主机之间的通信。

I2C接口的优点包括:1. 简单:I2C接口的硬件和软件实现相对简单,易于集成和调试。

2. 多从机支持:I2C接口允许连接多个从机,方便实现复杂的系统。

单片机ISP、IAP和ICP几种烧录方式的区别

单片机ISP、IAP和ICP几种烧录方式的区别
通过指定的方式激活之,它可以和PC或其它上位机通过串口联系,不用使单片
机离开应用系统而更新内部的程序/设置)进行程序的烧写操作。
因此,具有ISP 功能的MCU 可以不使用编程器进行编程。当然,实现ISP 可
能需要一些硬件电路支持,具体的在数据手册中有说明。
IAP: in applicatin programming 在应用编程
但两者的操作方式,结果和应用场合有什么区别
什么是ISP:
用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;
什么是IAP:
在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;
1、ISP是把房子拆了再重造一间,那么在造好之前当然是不能住人的啦!
2、IAP是在造好的房子里边进行一些装修,当然人可以继续住啦!
ICP是在电路编程,是LPC芯片的编程方式,相当于ATMEL的ISP,而LPC的ISP就相当于ATMEL的IAP了。
ISP于IAP的区别
ISP:in system programming, 在系统编程
IAP,In Application Programing
单片机内部具有一些可擦写的非易失存储器,如Flash。在单片机独立运行时,
不具备IAP 功能的单片机并不能对Flash的数据进行修改,比如,对自身的某一

单片机原理与应用实例仿真第三版李泉溪课后答案

单片机原理与应用实例仿真第三版李泉溪课后答案

单片机原理与应用实例仿真第三版李泉溪课后答案一、填空1、除了单片机这一名称之外,单片机还可称为或。

答:微控制器,嵌入式控制器。

2、单片机与普通微型计算机的不同之处在于其将、、和部分,通过内部连接在一起,集成一芯片上。

答:CPU存储器、I/O口、总线3、AT89S52单片机工作频率上限为 MHz。

答:33Mz。

4、专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低和提高。

答:成本,可靠性。

二、单选1、单片机内部数据之所以用二进制形式表示,主要是A、为了编程方便B、受器件的物理性能限制C、为了通用性D、为了提高运算速度答:B2、在家用电器中使用单片机应属于微计算机的。

A、辅助设计应用B、测量、控制应用C、数值计算应用D、数据处理应用答:B3、下面的哪一项应用,不属于单片机的应用范围。

A、工业控制B、家用电器的控制C、数据库管理D、汽车电子设备答:C三、判断对错1、STC系列单片机是8051内核的单片机。

对2、AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM1个中断源、1个定时器(且具有捕捉功能)。

对3、单片机是一种CPU。

错4、AT89S52单片机是微处理器。

错5、AT89C52片内的Flash程序存储器可在线写入,而AT89S52则不能。

错6、为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。

对7、为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。

对6、为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。

对7、为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。

对8、单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能则是DSP的长处。

对四、简答1、微处理器、微计算机、微处理机、CPU单片机、嵌入式处理器它们之间有何区别?答:微处理器、微处理机和CPE们都是中央处理器的不同称谓,微处理器芯片本身不是计算机。

单片机当中ICP与ISP有哪些不同

单片机当中ICP与ISP有哪些不同

单片机当中ICP与ISP有哪些不同
在单片机设计当中,ISP 和ICP 是两个比较常见且重要的概念。

ISP 能
够让单片机通过采用简单的方式来擦除或写入电路板上的程序,并能够进行在
线调试。

ICP 也是比较常见的一种烧录程序。

对于新手来说,对于这两种方式
具有较大混淆性。

本篇文章主讲MCU 当中这两种烧录方法的区别,帮助各位新手进行理解。

在开发阶段
改code 时,不再需要将MCU 从板子上拔起来,拿到烧录器上烧,然后再装回去。

可以直接利用ISP/ICP Programmer 做板上烧录,为开发者提供了极大的便利性。

在量产阶段
客户可以采用先焊到板子上再烧code 的方式,将烧code 的动作安排在生产线的某一站。

那么传统的方式(先将code 烧好再焊到板子上)有什么缺点?
传统的方式是这样的: 拆封-->从tray 盘取出chip-->烧录-->把chip 放回tray 盘。

这样的流程比起上面建议的方式: 增加了烧录时间,容易造成QFP 包装的chip 弯脚,或忘了烧code 即放回tray 盘。

在成品阶段
已组装好的成品若要改code,可以透过预留的接口,利用ISP 或ICP,更新MCU,不需要拆机。

什么是IAP?
IAP 指的是,MCU 在运行的状态下,利用ISP 的机制,不透过外接工具(例。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

说说单片机流行的两个技术ISP和IAP
mcu 2009-10-26 22:44:09 阅读36 评论0 字号:大中小订阅
什么是ISP:
用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;
什么是IAP:
在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运
行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;
应用场合:
1,ISP 程序升级需要到现场解决,不过好一点的是不必拆机器了;
2,IAP 如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去,
这可能是他们的优点或应用吧
在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。

ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。

ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行口接到计
算机的RS232口,通过专门设计的固件程序来编程内部存储器。

ISP和IAP很相似,都是不需要把芯片从板子上拔出来,就达到了用PC-MCU的编程接口(JTAG、串口、双绞线、SPI等)搞定新版本的升级的
目的。

MCU内部都是首先执行一段独立的Boot代码(这段Boot代码一般是出厂预置,或使用编程器烧录的,通常只有1k或4k,SST通常是占用一块独立的Block,Philips通常是让BootROM地址与其他Flash 重叠,以达到隐藏的效果),Boot负责控制擦除程序存储器及给程序存储器编程的代码(或是处理器外部提供的执行代码),然后通过某种与PC计算机的通信方式(如,ether网口),将用户指定的某个在PC 上编译完成的MCU可运行的二进制代码文件编程入MCU内的程序存储器。

ISP和IAP最大的不同是:由谁来触发。

ISP有4种触发方式:
1.由外部硬件电路:如VDD保持高电平,给RST连续3个脉冲;
2.检测状态位:如ISPEN,为0时PC指针从0000H开始执行;为1时,通过“引导向量”计算出“ISP代码”的位置。

每次复位后都会检测该状态位;
3.中止控制符信号触发芯片复位:中止控制符信号就是指在异步串行口的接收脚上出现长达一帧长度的低电平,这里一帧的长度与异步串行口的工作模式有关。

4.直接调用ISP:用户程序也可以调用,但是很危险。

4种方式的目的是相同的——进入ISP子程序,比如Philips出厂的ISP子程序在1E00H-1FFFH,只要能引导PC指针指向1E00H就可以了。

而进入ISP代码的目的是:进入BootROM。

IAP的触发比较简单一些,没有外部触发。

通过一些指示位(SST为SC0/SC1、SFCF[1,0];Philips为一段IAP子程序,保存在FF00H~FFFFH地址空间中),达到引导到BootROM的目的。

殊途同归,ISP、IAP所进入的BootROM里面驻留的Boot代码,才是最终目标。

最后一种:并行编程模式。

不需要BootROM,直接设置芯片的多个引脚来让芯片识别命令(如:擦除、写入、验证等),从P口传地址、数据,就可以写入Flash
用LPC2000的IAP,你自己分配好FLASH空间,指定一个BLOCK用来存放你的数据,然后通过IAP进行写操作。

每次开机后,从这个BLOCK读你的数据。

相关文档
最新文档