打印

mpc82G516AF单片机iap功能

[复制链接]
6790|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xinuaile2003|  楼主 | 2009-10-5 15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用过mpc89e54的单片机,可以使用该单片机的iap功能存储我的数据,可是在mpc82G516AF单片机上,无法实现iap功能。
请问mpc82G516AF和mpc89e54有什么不同吗?对应的寄存器地址已经更改了。
沙发
hhtseng| | 2009-10-5 17:44 | 只看该作者
1# xinuaile2003

请问LZ,您用什么编程器编程您的程序到MPC82G516A里去的?

这个MPC82G516A芯片好像需要预先配置IAP空间,和MPC89E54的IAP空间从0x4000开始不同。

使用特权

评论回复
板凳
suoma| | 2009-10-5 21:39 | 只看该作者
没用过,帮顶!

使用特权

评论回复
地板
hhtseng| | 2009-10-6 09:59 | 只看该作者
1# xinuaile2003

MPC82G516A 的IAP出厂设置应该是从0xF000开始,IAP=3KB容量,如果你有U1 writer,可以从上选择MPC82G516A看到,你要使用超过3KB的IAP的话,只好再用U1 writer重新设定咯,不然就要找一下他们的代理帮忙处理了。

使用特权

评论回复
5
Finnyip| | 2009-10-6 10:05 | 只看该作者
:victory:楼上正解。

使用特权

评论回复
6
xinuaile2003|  楼主 | 2009-10-6 15:07 | 只看该作者
1# xinuaile2003  

请问LZ,您用什么编程器编程您的程序到MPC82G516A里去的?

这个MPC82G516A芯片好像需要预先配置IAP空间,和MPC89E54的IAP空间从0x4000开始不同。 ...
hhtseng 发表于 2009-10-5 17:44


我是使用8051_OCD_ICE_For_Keil_v2.21,在keil里仿真时下载程序的,我IAP操作的地址空间是0xF000 - 0xF1FF

使用特权

评论回复
7
xinuaile2003|  楼主 | 2009-10-6 15:14 | 只看该作者
1# xinuaile2003

MPC82G516A 的IAP出厂设置应该是从0xF000开始,IAP=3KB容量,如果你有U1 writer,可以从上选择MPC82G516A看到,你要使用超过3KB的IAP的话,只好再用U1 writer重新设定咯,不然就要找一下他们的代 ...
hhtseng 发表于 2009-10-6 09:59


我已经查到了出厂设置的IAP空间是从0xF000 - 0xFBFF的3K空间,我的操作空间是0xF000 - 0xF1FF,可是就是无法实现IAP操作。到官网下载了示例代码,也是同样的效果,写完N个数据之后,读出时,数据总是最后一次写入的值,该值我认为是最后一次保存在IFD寄存器当中的。

以下是官网下的示例代码,我只是在主函数把单个写入,单个读出改成多个一起写入,然后一起读出。

///////////////////////////////////////////////////
//
// FILE:       MPC89_IAP_Demo.c
// AUTHOR:     Neo (Hsin-Chih Lin)
// COPYRIGHT:  (c) Megawin Technology Co., Ltd.
// CREATED:    2008.5.20
// PURPOSE:    Demo IAP & UART Function
//
///////////////////////////////////////////////////
//#include "REG_MPC89L51-515.H"
//#include "REG_MPC82L54.H"
#include "REG_MPC82G516.H"
//#define     IAP_ADDRESS     0x1000//MPC89x51
//#define     IAP_ADDRESS     0x2000//MPC89x52
//#define     IAP_ADDRESS     0x4000//MPC89x54
//#define     IAP_ADDRESS     0x8000//MPC89x58
//#define     IAP_ADDRESS     0x1800//MPC82x52 default value
//#define     IAP_ADDRESS     0x3400//MPC82x54 default value
#define     IAP_ADDRESS     0xF000//MPC82G516 default value
void Erase_IAP(unsigned int);
void Write_IAP(unsigned int, unsigned char);
unsigned char Read_IAP(unsigned int);
///////////////////////////////////////////////////
//
// MainLoop()
//
///////////////////////////////////////////////////
void main(void)
{
unsigned int IAP_Address , Count_Address;
unsigned int i;
    unsigned char Uart_Data;
    IAP_Address = IAP_ADDRESS;                  //Set IAP start address
P1 = 0x7f;                                  //Turn off all LED
Erase_IAP(IAP_Address);                     //Erase One page (512 bytes)
for(i=0;i<128;i++)
    {
     Count_Address=IAP_Address+i;
        Write_IAP(Count_Address,i);             //Write IAP a byte
}
for(i=0;i<128;i++)
    {
     Count_Address=IAP_Address+i;
        Uart_Data=Read_IAP(Count_Address);      //Read IAP a byte
}
P1=0x00;                                    //Turn on all LED
while (1)
{
;
}
}
///////////////////////////////////////////////////
//
// Function:Erase_IAP()
//  Erase One page (512 bytes)
//
///////////////////////////////////////////////////
void Erase_IAP(unsigned int IAP_Address)
{
IFADRH = IAP_Address >> 8;                  //IAP Flash Address High Byte
IFADRL = IAP_Address & 0xFF;              //IAP Flash Address Low Byte
IFMT = 0x03 ;                               //IAP Flash Mode Table (Erase Mode)
ISPCR = 0x84 ;                              //Enable IAP to change flash
SCMD = 0x46 ;                               //Trigger IAP memory
SCMD = 0xB9 ;                              
}
///////////////////////////////////////////////////
//
// Function:Write_IAP()
//  Write to IAP address one byte
//
///////////////////////////////////////////////////
void Write_IAP(unsigned int IAP_Address, unsigned char Value)
{
IFADRH = IAP_Address >> 8;                  //IAP Flash Address High Byte
IFADRL = IAP_Address & 0xFF;              //IAP Flash Address Low Byte
IFD = Value ;                               //Flash data buffer
IFMT = 0x02 ;                               //IAP Flash Mode Table (Write Mode)
ISPCR = 0x84 ;                              //Enable IAP to change flash
SCMD = 0x46 ;
SCMD = 0xB9 ;
}
///////////////////////////////////////////////////
//
// Function:Read_IAP()
//  Read one byte from IAP address
//
///////////////////////////////////////////////////
unsigned char Read_IAP(unsigned int IAP_Address)
{
IFADRH = IAP_Address >> 8;                  //IAP Flash Address High Byte
IFADRL = IAP_Address & 0xFF;              //IAP Flash Address Low Byte
IFMT = 0x01 ;                               //IAP Flash Mode Table (Read Mode)
ISPCR = 0x84 ;                              //Enable IAP to change flash
SCMD = 0x46 ;
SCMD = 0xB9 ;
    return(IFD);                                //Return Flash data
}

使用特权

评论回复
8
hhtseng| | 2009-10-6 17:36 | 只看该作者
mpc89e54的单片机,可以使用该单片机的iap功能存储我的数据,可是在mpc82G516AF单片机上,无法实现iap功能。



我是使用8051_OCD_ICE_For_Keil_v2.21,在keil里仿真时下载程序的,我IAP操作的地址空间是0xF000 - 0xF1FF
xinuaile2003 发表于 2009-10-6 15:07


所以你的问题是,OCD ICE在keil里仿真时,IAP的操作不行是不?那直接运行呢?
你在MPC89E54肯定是直接运行的,那个芯片没有直接的仿真器。

使用特权

评论回复
9
hhtseng| | 2009-10-7 08:35 | 只看该作者
7# xinuaile2003

使用OCD ICE 仿真MPC82G516 会把出厂的IAP配置给擦除,所以要重新配置,记得重新配置后,别把芯片加密了,不然又得重新配置一回!!

使用特权

评论回复
10
huamunv| | 2009-10-8 22:13 | 只看该作者
IAP配置被擦除是不是就是IAP程序被破坏了?

使用特权

评论回复
11
laslison| | 2009-10-9 09:28 | 只看该作者
学习!

使用特权

评论回复
12
xinuaile2003|  楼主 | 2009-10-9 11:03 | 只看该作者
7# xinuaile2003  

使用OCD ICE 仿真MPC82G516 会把出厂的IAP配置给擦除,所以要重新配置,记得重新配置后,别把芯片加密了,不然又得重新配置一回!!
hhtseng 发表于 2009-10-7 08:35


我也是重新配置了硬件选项之后就可以了,这个OCD ICE仿真确实好用,不过也会被他害惨的。

谢谢大家的帮忙,现在问题总算解决了。重新配置硬件选项。

使用特权

评论回复
13
hhtseng| | 2009-10-9 11:57 | 只看该作者
IAP配置被擦除是不是就是IAP程序被破坏了?
huamunv 发表于 2009-10-8 22:13


应该是两码事,但是IAP配置被擦除了,还能读得到数据吗?
出厂的芯片是加密的,所以OCD ICE在下载时,会把包括IAP配置在内的Flash擦除所致。

新版本的ISP Programmer可以有选项勾选,保留IAP数据!!

使用特权

评论回复
14
huamunv| | 2009-10-17 11:24 | 只看该作者
14# hhtseng
谢了!

使用特权

评论回复
15
suoma| | 2009-10-21 12:39 | 只看该作者
学习···

使用特权

评论回复
16
linhai2009| | 2010-2-15 13:53 | 只看该作者
进来学习一下

使用特权

评论回复
17
megawin| | 2010-2-15 21:02 | 只看该作者
直接U2的ICP升级得了,4条线,还可以烧IAP大小,ISP也可以烧,多爽

使用特权

评论回复
18
ypj005| | 2010-2-21 11:43 | 只看该作者
才了解此单片机!
使用此单片机,如果有stc isp烧写器,仿真买个ocd-ice足够?使用iap 还要买个u2?

使用特权

评论回复
19
kknd2| | 2010-12-16 20:54 | 只看该作者
1# xinuaile2003  

请问LZ,您用什么编程器编程您的程序到MPC82G516A里去的?

这个MPC82G516A芯片好像需要预先配置IAP空间,和MPC89E54的IAP空间从0x4000开始不同。 ...
hhtseng 发表于 2009-10-5 17:44

我使用的是U2编程器。
我也是将page address设定从0xF000开始,但烧入后总不成功
代码基本同7楼,
我只试着只写一个byte,就出现之前的问题

使用特权

评论回复
20
David_ming| | 2010-12-16 22:24 | 只看该作者
本帖最后由 David_ming 于 2010-12-16 22:25 编辑

19# ypj005

OCD ICE只是不能脱机,其他的功能都有,涵盖了U1,官网上有最新的固件。还有,IC出厂的时候默认加密的,所以,仿真会擦除整片,包括配置字。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝