如何实现W7100A程序烧录wiznet.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何实现W7100A程序烧录wiznet

如何实现W7100A程序烧录 版本1.0 ? 2010 WIZnet Co., Inc. All Rights Reserved. 更多详细信息,请登录官方主页 目录 1 简介 3 2 ISP模式 4 3 APP模式的ISP进程 5 简介 W7100A的代码存储器内部具有启动ROM(Boot ROM)和闪存(Flash Memory)。启动ROM通过ISP函数自动驱动W7100A,因此用户不能修改启动ROM中的代码。但是,闪存仍然可以作为代码存储器使用。 当系统复位时,W7100A自动执行启动ROM的启动代码。这之后的过程根据BOOTEN引脚的不同而有所差异。这篇手册将会介绍如何将代码烧录到闪存。 下面为详细的执行过程: 图1 启动序列流程图 如上图1所示,在复位后,根据W7100A的BOOTEN引脚设置,会有两种不同的执行方法。第一种方法是通过将BOOTEN引脚置为1来使用启动ROM中的ISP功能。另外一种方法是通过将BOOTEN引脚置为0,不需要使用启动ROM直接跳转到闪存。 用户可以用ISP模式烧录闪存或者修改APP模式下的ISP进程。更多关于APP模式(BOOTEN引脚=‘1’)执行的详细信息,请参考W7100A数据手册的‘2.1代码存储器’。 ISP模式 当BOOTEN引脚被置为1时,W7100A的状态为ISP模式,用户可以使用WIZnet的ISP程序。在这种模式下,通过ISP程序对代码闪存和数据闪存进行写入(write)和读取(read)操作。更多的详细信息,请参阅‘WizISP程序用户指南’。 图2 用于W7100A的ISP程序 图3 代码存储器映射转换 APP模式的ISP进程 通常用ISP程序来写入和擦除代码/数据闪存是通用的方法。但是启动ROM内含有ISP函数,用户可以直接调用该函数,但是需要注意此时W7100A必须执行于APP模式下。如果打开的是ISP模式,用户需要重启将ISP模式改为APP模式。当调用ISP函数时,请注意调用ISP函数的路径必须不能发生在重叠区域。如图中的‘初始化声明’,重叠区域是启动ROM和闪存区重叠的部分。因此,用户必须在重叠区域(0x0000~0x07FF)上烧录代码。如果ISP函数调用路径发生在重叠区域(0x00000~0x07FF),因为启动ROM和闪存之间的转换过程没有返回地址将会产生错误。为了使程序正确地执行,用户必须在‘Keil uVision3’编译器中键入下面的代码来防止重叠。 按照路径‘Options for Target ‘project name’’ = ‘LX51 Locate’ = ‘User classes’在工程才中键入段落符号‘CODE_ISP(C:0x0800)’。然后将下面的代码插入function()函数中, function()函数内包括调用ISP函数。用户可以根据编译器的不同改变该过程。 #pragma userclass(CODE = ISP) 图.4 防止代码存储器重叠 如果W7100A通过闪存代码执行,W7100A将会完成存储器映射转换,如图3‘代码闪存状态’,同时启动ROM会被禁止。因此,要使用启动ROM内的ISP函数,必须将存储器图转换回来以重新激活启动ROM(Boot ROM)。用户还必须将WCONF(0xFF)寄存器的ISPEN位置设为‘0’,这样启动ROM(Boot ROM)才能被激活。然后,用户可以调用已定义的ISP函数,与ISPID一样,在闪存中擦除或者写入数据。 如下是使用ISP函数的基本示例。 注意: 在这一章,所有的示例代码都是基于‘Keil uVision3’编译器。 #define ISP_ENTRY 0x07FD unsigned char do_isp(unsigned char isp_id, unsigned short isp_addr, unsigned char isp_data) { TMPR0 = EA; //备份EA EA = 0; // 禁止EA WCONF = ~(0x40); // 启动ISP Entry ISPID = isp_id; ISPADDR16 = isp_addr; ISPDATA = isp_data; ((void(code*)(void))ISP_ENTRY)(); //调用ISP Entry WCONF |= 0x40; // 禁止ISP Entry EA = TMPR0; // 恢复EA return ISPDATA; } ‘do_isp’函数利用isp_

文档评论(0)

sunshaoying + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档