显示标签为“开源硬件”的博文。显示所有博文
显示标签为“开源硬件”的博文。显示所有博文

2012年8月8日星期三

如何實現W7100A程式燒錄

1.简介
W7100A的代码存储器内部具有启动ROM(Boot ROM)和闪存(Flash Memory)。启动ROM通过ISP函数自动驱动W7100A,因此用户不能修改启动ROM中的代码。但是,闪存仍然可以作为代码存储器使用。
当系统复位时,W7100A自动执行启动ROM的启动代码。这之后的过程根据BOOTEN引脚的不同而有所差异。这篇手册将会介绍如何将代码烧录到闪存。
下面为详细的执行过程:
如上图1所示,在复位后,根据W7100A的BOOTEN引脚设置,会有两种不同的执行方法。第一种方法是通过将BOOTEN引脚置为1来使用启动ROM中的ISP功能。另外一种方法是通过将BOOTEN引脚置为0,不需要使用启动ROM直接跳转到闪存。
用户可以用ISP模式烧录闪存或者修改APP模式下的ISP进程。更多关于APP模式(BOOTEN引脚=‘1’)执行的详细信息,请参考W7100A数据手册的‘2.1代码存储器’。
2. ISP模式
当BOOTEN引脚被置为1时,W7100A的状态为ISP模式,用户可以使用WIZnet的ISP程序。在这种模式下,通过ISP程序对代码闪存和数据闪存进行写入(write)和读取(read)操作。更多的详细信息,请参阅‘WizISP程序用户指南’。
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函数。用户可以根据编译器的不同改变该过程。
如果W7100A通过闪存代码执行,W7100A将会完成存储器映射转换,如图3‘代码闪存状态’,同时启动ROM会被禁止。因此,要使用启动ROM内的ISP函数,必须将存储器图转换回来以重新激活启动ROM(Boot ROM)。用户还必须将WCONF(0xFF)寄存器的ISPEN位置设为‘0’,这样启动ROM(Boot ROM)才能被激活。然后,用户可以调用已定义的ISP函数,与ISPID一样,在闪存中擦除或者写入数据。
如下是使用ISP函数的基本示例。

注意: 在这一章,所有的示例代码都是基于‘Keil uVision3’编译器。
‘do_isp’函数利用isp_id、isp_addr和isp_data来执行ISP函数。
用户必须确保上面的ISP函数执行过程中没有其它中断发生。首先,将ISPEN设置为‘0’激活启动ROM(Boot ROM)和ISP ENTRY。其次,将相应的ISPADDR和ISPDATA写入已定义的ISPID中。然后,通过调用ISP ENTRY来执行启动ROM(Boot ROM)中的ISP函数。如果ISP ENTRY被调用,ISP函数将会相应于用户已经设定的ISPID来执行。当ISPID执行完成后,ISP ENTRY将会自动返回到ISP函数被调用的路径。在返回之后,如果用户将ISPEN位置设为‘1’,处于激活状态的启动ROM和ISP ENTRY将会失效。然后,闪存可以完全再次作为代码存储器使用。最后,返回所有的中断设置为初始状态,完成整个过程。
如下是根据每一个命令定义的ISPID。
因为‘ISP_chip_erase()命令’能擦除整个闪存数据,并且也可以擦除执行代码,执行代码在返回到闪存后将执行,所以除了ISP程序外不要使用‘ISP_chip_erase()命令’。
使用上面的命令,擦除从0x00到1区(sector)的值、写入0xAA的值并且在0x00中读,代码示例如下:
用于数据闪存(Data Flash)的示例代码如下所示,描述了用户可以擦除1区(sector)并且在1区写入0x00~0xFF的值。因为W7100A的数据闪存(Data Flash)具有256字节(1区),不需要RAM结束地址用于ISP_data_sector_prog 或者ISP_data_sector_read。
以上就是本文的全部内容,有什么不解或是需求,可以随时留言联系我们或者去我们的官网咨询。

☞想了解更多,请登录我们的网站:http://www.iwiznet.cn/

或者来电:86-10-84539974(转166),QQ:2377211388,联系人:TME-Jerry 谢谢!
官方博客:blog.iwiznet.cn

 

2012年3月16日星期五

Arduino Ethernet Shield 应用W5100方案剖析


通过这段时间连续对硬件开放平台Arduino的介绍,相信大家对它已经有初步的了解了。可是你了解Arduino的Ethernet shield方案吗?你知道在Arduino网络扩展板中谁的方案表现最佳吗?毫无疑问是WIZnet硬件网络芯片W5100.


Arduino电子积木-W5100网络芯片

目前将Arduino连接到局域网中已经有不少解决方案,比如之前介绍的Ethernet扩展板或者WiFi模块,这里要介绍的电子积木W5100网络模块提供了另外一种选择。W5100是一款集TCP/IP协议、MAC和PHY于一体的网络芯片,支持直接总线接口、间接总线接口和 SPI总线,并且Arduino IDE内置的Ethernet库就是直接针对W5100设置的:
这款W5100网格模块电子积木采用的是SPI接口,因此我们可以使用IDC扩展板与Arduino主板进行连接:


另外正常使用时模块上的PROG开关不能置到ON的位置上:


测试的话我们可以使用Arduino自带的Ethernet库中的WebServer例子,从Arduino IDE的File->Examples->Ethernet菜单中选择WebServer,打开相应的代码:




根据你的局域网设置的不同,一般只需要修改IP地址就可以了:
byte ip[] = { 192,168,0, 177 };
相应的程序下载到Arduino并运行起来之后,Arduino实际上就成为了一个Web Server,因此我们可以通过浏览器来进行访问。Ethernet库所提供的WebServer程序实际上是接收来自于浏览器的请求,读出所有模拟输入端口的值,并返回给浏览器。如果感兴趣的话可以试着在模拟输入端口上接上相应的传感器,来观察返回值的不同:


如果您想知道更详细的内容,请关注http://blog.flamingoeda.com/
Arduino相关网站:
  • Arduino官方(英文):www.Arduino.cc
  • Arduino中国相关网站:http://blog.flamingoeda.com/
  • Arduino台湾(繁体:)www.Arduino.tw


  • 如果您有什么疑问请直接留言也可以登录我们的官网:http://www.wiznettechnology.cn

  • 或者来信:Tel: 86-10-84539974(转166),QQ:2464237212,邮箱:wiznetbj@wiznettechnology.com,联系人:Lily Zhang,谢谢!