2012年3月30日星期五

Arduino克隆

大家都了解Arduino吗?知道OSHW吗?Arduino,是一块基于开放源代码的USB接口Simple I/O接口板(包括12通道数字GPIO,4通道PWM输出,6-8通道10bit ADC输入通道),并且具有使用类似Java,C语言的IDE。它可以使用开发完成的电子元件例如Switch或sensors或其他控制器、LED、步进马达或其他输出装置。也可以独立运作成为一个可以跟软件沟的接口,例如说:flash processing Max/MSP VVVV 或其他互动软件…。令人振奋的是,截止目前,Arduino官方提供的8种网络扩展板有7种是基于WIZnet W5100网络芯片的(硬件TCP/IP协议栈)。下面就为大家放映一段关于Arduino的PPT!










致谢:感谢Dr.Chen & Mr. Gang的大力协助! 

Arduino相关网站:
  • Arduino官方(英文):www.Arduino.cc
  • Arduino中国(简体):www.Arduino.cn(建设中...)
  • Arduino中国相关网站:http://blog.flamingoeda.com/
  • Arduino台湾(繁体:)www.Arduino.tw

  • 如果您对WIZnet产品或感兴趣,请您尽管联系我们。


    我们的官网:http://www.wiznettechnology.cn
    或者来信:Tel: 86-10-84539974(转166),
              QQ:2464237212,
              邮箱:wiznetbj@wiznettechnology.com,
              联系人:Lily Zhang,谢谢!

    2012年3月28日星期三

    串口轉乙太網在照明系統中的應用


    为了给控制系统减压Zone Beacon (www.zonebeacon.com)提供了智能电话应用程序。他们推荐在照明系统和智能电话应用程序—Zone Beacon之间使用WIZneWIZ110SR作为网关解决方案。智能电话应用程序—Zone Beacon是一种远程虚拟小键盘。

    教程

    怎样安装WIZnet 的串口转以太网
    这是一个视频教大家如何学习如何使用配置工具程序来安装WIZ110SR

    2012ESC SV展会

    WIZnet即将参加ESC SV展会。我们将会展示我们最新的产品网络单片机芯片W7200,以太网控制芯片W5200,以及超低功耗WIFI模块。
    这是一个深入了解我们产品的绝佳机会。欢迎莅临我们的展位#2006
    -时间2012326—29
    -地区:美国圣荷西会议中心
    -展位号:#2006

    如果您有什么疑问请直接留言也可以登录我们的官网:http://www.wiznettechnology.cn
     或者来信:Tel: 86-10-84539974(转166),QQ2464237212,邮箱:wiznetbj@wiznettechnology.com,联系人:Lily Zhang,谢谢!


    【轉】ARM設計思想与高效C編程


    一.RISC设计思想
        ARM内核采用RISC体系结构。RISC是一种设计思想,其目标是设计出一套能在高时钟频率下单周期执行,简单而有效的指令集。RISC的设计重点在于由硬件执行的指令的复杂度,这是因为软件比硬件容易提供更大的灵活性和更高的智能。因此,RISC设计对编译器有更高的要求;相反,传统的复杂指令集的计算机(CISC)则更侧重于硬件执行指令的功能性,使CISC变得更复杂。
    RISC设计思想主要由下面4个设计准则来实现:
             指令集
    RISC处理器减少了指令种类,每条指令的长度都是固定的,允许流水线在当前指令译码阶段去取其下一条指令;而CISC处理器中,指令的长度通常不固定,执行也需要多个周期。
             流水线
    在理想情况下,流水线每周期前进一步,可获得最高的吞吐率;而CISC指令的执行需要调用微代码的一个微程序。
             寄存器
    RISC处理器拥有更多的通用寄存器,每个寄存器都可存放数据或地址。寄存器可为所有的数据操作提供快速的局部存储访问;而CISC处理器都是用于特定目的的专用处理器。
             load-store结构
    处理器只能处理寄存器中的数据。独立的load和store指令用来完成数据在寄存器和外部存储器之间的传送。因为访问存储器很耗时,所以把存储器访问和数据处理分开。这样有一个好处,那就是可反复地使用保存在寄存器中的数据,而避免多次访问存储器。相反,在CISC结构中,处理器能够直接处理存储器中的数据。
    二.ARM设计思想
    为降低功耗,ARM处理器已被特殊设计成较小的核,较高的代码密度。ARM内核不是一个纯粹的RISC体系结构,这是为了使它能够更好的适应其主要应用领域-嵌入式系统。在某种意义上,甚至可以认为ARM内核的成功,正是因为它没有在RISC概念上沉入太深。现在系统的关键并不在于单纯的处理器速度,而在于有效的系统性能和功耗。
    面向嵌入式系统的指令集
             一些特定指令的周期数可变
    例如:多寄存器装载/存储的load/store指令的执行周期就是不确定的
             内嵌桶形移位器产生了更为复杂的指令
             Thumb 16位指令集
             条件执行
             增强指令
    三.高效的C编程
    1)C数据类型的有效用法
             对于存放在寄存器中的局部变量,除了8位或16位的算数模运算符外,尽量不要使用char和short类型。而要使用有符号或者无符号的int类型。除法运算时使用无符号数执行速度更快。
             对于存放在主存储器中的数组和全局变量,在满足数据大小的前提下,应尽可能使用小尺寸的数据类型,这样做可以节省存储空间。ARMv4体系结构可以有效的装载和存储所有宽度的数据,并可以使用递增数组的指针来有效的访问数组。对于short类型数组,要避免使用数组基地址的偏移,因为LDRH指令不支持偏移寻址。
             由于隐式或者显式的数据类型转换通常会有额外的指令周期开销,所以在表达式中应尽量避免使用。load和store指令一般不会产生额外的转换开销,因为load和store指令是自动完成数据类型转换的。
             对于函数参数和返回值应尽量避免使用char和short类型。即使参数范围比较小,也应该使用int类型,以防止编译器做不必要的类型转换。
    2)高效的编写循环体
             使用减计数到零的循环结构,这样编译器就不需要分配一个寄存器来保存循环中止值,而且与0比较的指令也可以省略。
             使用无符号的循环计数值,循环继续的条件为i!=0而不是i>0,这样可以保证循环开销只有两条指令。、
             如果事先知道循环体至少会执行一次,那么使用do-while循环要比for循环好,这样可以使编译器省去检查循环计数值是否为0的步骤。
             展开重要的循环体可降低循环开销,但不要过度展开,如果循坏的开销对整个程序来说占的比例很小,那么循环展开反而会增加代码量并降低cache性能。
             尽量使数组的大小是4或8的倍数,这样就可以容易地以2,4,8次等多种选择展开循环,而不需要担心剩余数组元素的问题。
    3)高效的寄存器分配
             应该尽量限制函数内部循环所用局部变量的数目,最多不超过12个,这样,编译器就可以把这些变量都分配给ARM寄存器。
             可以引导编译器,通过查看是否属于最内层循环变量来确定某个变量的重要性
    4)高效的调用函数
             尽量限制函数参数不要超过4个,这样函数调用的效率会更高。也可以将几个相关的参数组织在一个结构体中,用传递结构体指针来代替多个参数。
             把比较小的被调用函数和调用函数放在同一个原文件中,并且要先定义,后调用,编译器就可以优化函数调用或者内联较小的函数。
             对性能影响较大的重要函数可使用关键字_inline进行内联。
    5)避免指针别名
             不要依赖编译器来消除包含存储访问的公共子表达式,而应建立一个新的局部变量来保存这个表达式的值,这样可以保证只对这个表达式求职一次。
             避免使用局部变量的地址,否则对这个变量的访问效率会比较低。
    6)高效的结构体安排
             结构体元素要按照元素的大小来排列,以最小的元素放在开始,最大的元素安排在最后。
             避免使用很大的结构体,可以使用层次化的小结构体来代替。
             为了提高可移植性,人工对API的结构体添加填充位,这样,结构体的安排将不会依赖于编译器。


    转自:IC边缘人家的博客


    如果您有什么疑问请留言或者来信致电均可:wiznetbj@wiznettechnology.com ,
    Tel: 010-84539974(转166)希望本篇文章可以给您带来帮助,谢谢。

    2012年3月27日星期二

    Arduino乙太網Shield


    Arduino以太网盾仅仅几分钟的时间就能够把你的Arduino连接到因特网。只需要把这个模块插进Arduino板,用一个RJ45电缆(没有包括在内)把它连接到网络,然后按照一些简单地指令就可以通过因特网控制你的世界了。像往常一样用Arduino,平台的每一部分:软件,硬件和文档全部都是免费的和开源的。这意味着你可以精确的学习到它是怎么制造出来的以及当你开始设计你的电路的时候采用它的设计。每天成千上万的Arduino平台已经成为了全球人民创造力的源泉。加入我们,Arduino就是你的!




    需求和Arduino板(不包括在内)
    工作电压5VArduino板提供的)
    以太网控制器:内部自带16K缓冲区的W5100
    连接速度:10/100Mb
    SPI端口连接Arduino

    Arduino以太网盾允许一个Arduino板连接到因特网中。这基于WIZNet W5100以太网芯片(数据表)WIZNet W5100TCPUDP提供了一个网络(IP)栈。它支持四个同事进行的SOCKET连接。可以使用以太网文库来写用盾连接到因特网的梗概。以太网盾用场的绕线头连接了一个Arduino板,这个绕线头也通过盾延伸了。这就保持了pin布局完整并且允许别的盾堆放在顶部。 Arduino板的最近修订版本暴露了在Arduino UBO板的rev 31.0引脚线。

    以太网盾有一个标准的RJ-45接口,和一个通过以太网启用的线变压器和动力。

    板上有一个微SD卡插槽可以用来为在网络服务存储文件。这与ArduinoUNOMEGA(使用以太网文库)一致。板上的微SD卡阅读器通过SD文库可以被使用。当使用文库的时候,SS是在pin4上。盾的原始版本包含了一个全尺寸的SD卡槽,而当前这个不支持。

    这个以太网盾也包含一个重置控制器,以确保W5100以太网模块恰当的被重置当供电的时候。而它以前的版本与MEGA不兼容,当供电后需要人工重置。

    当前的盾有一个以太网供电模块(PoE),它是被设计用来从传统的双绞线第5种以太网电缆中提取功率的:
    IEEE802.3af兼容
    低输出的波纹和噪音(100mVpp
    输入电压范围 36V57V
    过载和短路保护
    9V的输出
    高频率的DC/DC变流器:typ 75% @ 50% load
    1500V隔离(输入和输出)

    这个以太网盾并没有自带以PoE,他是一个单独部分,必须被添加才能使用。

    ArduinoSPI总线(通过ICSP头)与W5100SD卡连接。这是在Duemilanove上的数位销11,12,13。和Mega上的数位销50,51,52。在这两个板上,数位销10是用来选择W5100,而数位销4是用来选择SD卡,但是必须保持一个输出,否则SPI接口将不能工作。

    既然,因为W5100SD卡共用一个SPI总线,所以一次只能激活一个。如果在你的项目中这两个你都用,那就应该被相应的资料库认真照看。如果你不使用其中的一个,然而,你需要明确的取消选择。要使用SD卡,需要作为一种输出设置销4并且写进一个高位。如果使用W5100设置数字销10作为一种高位输出。

    Shield提供一个标准的RJ45以太网插座。

    Shield上的重置按钮重置W5100Arduino板。

    Shield包含了大量的LED信号:
    PWR:表明板和Shield被供电了
    LINK:表明网络连接存在,并且当Shield传输和接收数据的时候闪烁
    FULLD:表明当前的网络连接是全双工;
    100M:表明当前100Mb的网络连接(相对应的是10Mb/s
    RX:当Shield接收到数据的时候闪烁
    TX:当Shield发送数据的时候闪烁
    COLL:发现网络冲突的时候闪烁


    焊接跨接线标注为INT可以被理解为允许Arduino板从W5100接收事件中断驱动的通知,但是以太网资料库并不支持这个。这个跨接线把W5100INT销连接到Arduino的数字销2


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

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

    2012年3月26日星期一

    (轉)揭秘——google中國廚師團隊:不創新會死


    如果有机会去谷歌食堂蹭顿饭,懂行的人都表示会“兴奋地搓搓手”。
        要说谷歌食堂的名气,丝毫不亚于这间互联网公司本身。先不管吃鲍鱼龙虾和烤鸭的传闻是否为真,谷歌中国公司的食堂百分之百地延续了“不创新会死”的工程师文化,甚至连大师傅都是半个“极客”——卖点十足。
        每到中午十一点三十,阳光刚好打在一层餐厅的大玻璃窗上,厨师依次将菜盘摆上厨架,餐碟、碗筷准备到位,掀去保鲜膜,香气随着热气飘出来,穿着帽衫仔裤或是格衬衣毛坎肩、脖子上挂着工牌的IT达人们,插着裤子口袋淡定入场。
        每天的菜单都贴在食堂门口,里边则分为中餐区、西餐区、沙拉区和现做区。举个例子,某天的中餐凉菜是卤鸭翅和酸辣蕨根粉,热菜则有韭黄炒杏鲍菇、温炝双 花、盐水鳜鱼、风味羊排等等不下十种,西餐主打的则是“12小时焗牛肩峰配芒果萨萨汁”以及白葡萄汁烩蛤蜊,另配当家比萨,还有六道西式甜品。形式是自助 餐,不用刷卡不用付费,吃多少悉听君便。
        这家公司的企业文化决定了其对于员工饮食的投入是不遗余力的。厨师长薛荣升说,他们的设备都是世界上最顶级的,2007年谷歌食堂刚开业时使用的烤箱,全北京只有两台。而每年公司给出的餐饮预算,基本上不会让厨师团队面临成本上的压力。
       创意
        谷歌厨师的创新热情有多高?据不完全统计,他们从2007年到2010年,就开发了超过3000种甜品,而菜品的数目则多到无法计算。
        每周都有固定的一天是“菜品研发日”。厨师们上班颠勺,下班还得做功课,到了研发日这天,几位师傅凑在一起,每人做一道新菜,大伙品尝、点评,选出好的就 放在下周的菜单之中。这样,每天员工的餐桌上至少都能有一两道新菜。外界有传闻说谷歌菜单二十天不重样,厨师长薛荣升表示“远远不止”,有时“同一道菜, 要隔三五个月才能再次出现”。“我们几乎把所有的精力都放在菜品研发之上。”薛师傅补充道。
        薛荣升每周要通过视频会议的形式,与美国总部和亚太地区的主管沟通食堂的近况,厨师团队的秘书则会每日将菜单提前上传至员工内部网站Foodback(饮 食反馈)上,与全球的谷歌厨师分享。他们甚至会应用谷歌的社交网站Google+,设立群组,在线讨论菜单的制定、开发和创新,当然,任何一位谷歌员工都 可以在上面发表对每一道菜品的评价和感受。当然,每年薛荣升还要飞去谷歌的北美总部,参加一年一度的谷歌厨师“大会师”。
        这种在互联网辅助下的电子化有效沟通,充分地展现了谷歌作为一家互联网企业的个性十足。“传统餐馆对于客人的反应是滞后的,往往只有客人有了强烈的要求, 才会反馈到厨房里,”薛师傅说,而谷歌的厨师则喜欢用想象力决定员工的味觉,“中点师傅和西点师傅一起工作,发明出提拉米苏驴打滚,颠覆了中式驴打滚硬硬 的红豆馅料。我们的蜗牛卷用的是山东临沂的小米面煎饼,广东的肠粉搭配日式天妇罗,这些菜都受到了员工的欢迎。”
       科学
        其实非要说谷歌的工程师天天吃大餐,倒也并不客观。因为他们的菜谱是经过严格的营养学搭配,以炖、煮为主,极少见煎、炸,“龙虾、燕窝我们不常吃了,”薛荣升说,“考虑到食材的安全和营养的均衡,这两年食堂主要钻研于开发家常菜。”
        谷歌与哈佛大学共同研发了饮食结构的“健康金字塔”,是独家的营养秘籍,讲解图张贴在食堂最显眼的位置。金字塔从尖到底分为红、黄、绿三个层次,绿色代表“可以随便吃”,黄色则是“不要吃太多”,而红色告诉员工这些食物“偶尔可以尝一尝”。
        谷歌厨房的全球统一标准是不放味精,并且严格控制炒菜的用油量,“在外面炒一盘菜的油,谷歌用来炒30盘菜,”薛师傅说,“我们主张员工吃糙米饭,提前用 水把糙米泡上20个小时,等待其出现了发芽的物理反应再上锅蒸,氨基酸的含量呈几何倍数增加,并同时保证了口感与健康。”
             除 此以外,每一盘菜都有自己的标签。“画一颗星的是烹饪温度低于48度,两颗星则是高于这个温度;有猪肉的菜,我们会画一只小猪,提示穆斯林员工;菜里加了 酒,我们会加‘酒杯’的标志;加了奶,就有‘奶瓶’的标识;如果有蚝油或者蛤蜊、虾等,我们会画一个小螃蟹,对贝壳类过敏的员工就会了解。”薛师傅解释。
        工程师文化便是以数字说明问题,谷歌会科学地收集大家的反馈,哪怕一道菜是咸是淡,都可以通过员工的网络投票比率来分析,“不要以为工程师是羞涩的群体,他们的表达欲会出乎你的意料。”薛荣升说

    本文转自:

    http://blog.renren.com/GetEntry.do?id=809750841&owner=221325651

    Wiznet W5100硬件TCP/IP嵌入式乙太網控制器


    WIZnet W5100硬件TCP/IP嵌入式以太网控制器是一个功能齐全的、单芯片的、因特网驱动的10/100以太网控制器。嵌入式应用需要易于集成、稳定、性能、空间、系统成本控制而W5100就是为嵌入式应用设计的。W5100的设计促进了没有操作系统的网络连通性容易实现。并且它与IEEE 802.3 10BASE-T 802.3u 100BASE-TX 是兼容的。Wiznet W5100硬件TCP/IP嵌入式以太网控制器,包括一个全硬件、市场证明的TCP/IP栈和整合的以太网MACPHY。这个硬件TCP/IP栈支持TCP, UDPIPv4, ICMP, ARP, IGMPPPPoE,并且包括一个传输数据用的内部缓冲区。为了容易整合,在MCU那边提供了3个不同的接口——直接总线、间接总线、和SPI

    特征:
    - 支持硬件TCP/IP协议: TCP, UDP, ICMP, IGMP, IPv4, ARP, PPPoE, Ethernet
    - 内嵌10BaseT/100BaseTX以太网物理层
    - 支持自动应答(全双工/半双工模式)
    - 支持自动极性变换(MDI/MDIX
    - 支持ADSL连接 (支持PPPOE协议,带PAP/CHAP验证)
    - 支持4个独立的端口(sockets)同时连接
    - 不支持 IP 分段
    - 内部16K字节存储器作TX/RX缓存
    - 0.18μm CMOS工艺
    - 3.3V工作电压,I/O口可承受5V电压
    - 小巧的LQFP80无铅封装,符合环保要求
    - 支持串行外设接口(SPI Mode 0,3)
    - 多种指示灯信号输出(TxRxFull/DuplexCollisionLinkSpeed

    应用:
    家庭网络设备:机顶盒,PVRs,数字媒体配适器;
    串口转以太网:存取控制,LED显示器,无线AP转播等等;
    并行转以太网:POS/微打印机,复印机;
    USB转以太网:存储设备,网络打印机;
    GPIO转以太网:家庭网络传感器;
    安全系统:DVRs,网络摄像机,终端;
    工厂和建筑的自动化;
    医疗检测仪器;
    嵌入式设备;




    以上的图标显示了PIN的尺寸,但不是所有80 pins都被显示了。

    点击一下连接此处下载W5100数据手册




    如果您有什么疑问请直接留言也可以登录我们的官网:http://www.wiznettechnology.cn
    或者来信:Tel: 86-10-84539974(转166),QQ2464237212,邮箱:wiznetbj@wiznettechnology.com,联系人:Lily Zhang,谢谢!

    2012年3月22日星期四

    網絡卸載模塊,開放源代碼-WIZ820io用戶手冊


    大家好,WIZnet推出了网络卸载模块,开放源代码的WIZ820io啦,今天我给大家分享一下它的源代码吧 ~~

    1. 简介

    WIZ820io是一个高度集成的以太网控制模块,其集成了全硬件TCP/IP芯片W5200(内嵌以太网物理层)、带有以太网变压器的RJ45(MAG-JACK)以及其他外围电路。使用WIZ820io,用户可以快速地评估W5200并无需设计与以太网相关的繁琐的外围电路。
    针对在已有的产品中构架以太网功能的用户,WIZ820io将是一个理想的选择。
    有关全硬件TCP/IP芯片的详细信息,请参考W5200的数据手册。
    WIZ820io由W5200和MAG-JACK所构成。
    • TCP/IP协议栈,以太网MAC: W5200
    • 以太网物理层: 内嵌于W5200
    • 以太网接口: MAG-JACK(带有以太网变压器的RJ45

    1.1 产品特性

    • 支持10/100BaseT
    • 支持全/半双工通信
    • 支持自动握手(auto-negotiation)和自动极性变换
    • 兼容IEEE 802.3/802.3u
    • 支持高速SPI接口(SPI模式0或3)
    • I/O口工作电压为3.3V,最高耐压为5V
    • 具有多种网络状态信号输出
    • 内部集成了TCP, IPv4, UDP, ICMP, ARP, PPPoE, IGMP等网络协议
    • 内嵌以太网DLC和MAC层
    • 支持8个端口同时通信
    • 具有休眠模式,降低功耗
    • 支持网络唤醒
    • 提供Socket API,方便程序移植
    • 双排2.54mm间隔1 x 6插针,便于使用
    • 精巧的设计: 23mm x 25mm (PCB尺寸)

    2. 管脚定义与说明

    2.1 管脚定义




    2.2 管脚说明


    管脚编号
    I/O
    管脚名称
    说明
    J1
    1
    P
    GND
    接地
    2
    P
    GND
    接地
    3
    I
    MOSI
    Master Out Slave In
    SPI MOSI信号管脚
    4
    I
    SCLK
    SPI 时钟
    SPI时钟信号管脚
    5
    I
    nSS
    SPI Slave Select : 低电平有效
    该管脚用于选择从设备,低电平有效
    6
    O
    nINT
    Interrupt : 低电平有效
    该管脚用于输出W5200产生的中断信号,例如:连接、断开、接收数据超时, 和WOL (Wake on LAN)。 该中断被IR或Sn_IR(Socket n-th Interrupt Register)寄存器清空。
    J2
    1
    P
    GND
    接地
    2
    P
    3V3D
    电源: 3.3V
    3
    P
    3V3D
    电源: 3.3V
    4
    I
    PWDN
    Power Down : 高电平有效
    该管脚用于工作模式选择。
    Low: 正常模式
    High: 启动低功耗(Power Down)模式
    5
    I
    nRESET
    Reset: 低电平有效
    该管脚用于初始化W5200。
    当初始化W5200时,该管脚需维持至少2us低电平,并且至少维持150ms高电平。
    6
    O
    MISO
    Master In Slave Out
    SPI MISO信号管脚

    3. SPI操作

    WIZ820io是一个SPI从设备,其接收SPI主设备的指令并按照指令工作。SPI主设备通过SPI接口来控制W5200,SPI接口由以下4个信号所组成:从设备选择信号(nSS), SPI时钟信号(SCLK), MOSI(Master Out Slave In)信号和MISO(Master In Slave Out)信号。
    SPI有4种工作模式:Mode 0~3。每种模式根据SCLK信号的极性(polarity)和相位(phase)的不同而有所差异。W5200作为SPI从设备,支持最常见的SPI模式0和模式3。
    SPI模式0和模式3之间唯一的差别就是SCLK信号的极性在闲置时的不同。无论是SPI模式0或模式3,在SCLK处于上升沿时,数据都将被锁定,并且在SCLK处于下降沿时,数据将被送出。

    3.1 通用SPI主设备操作例

    1. 配置主设备I/O口的方向
    2. 闲置时将nSCS置高
    3. 在SPDR寄存器(SPI Data Register)中写入要发送的目的地址
    4. 在SPDR寄存器中写入OP代码和数据长度
    5. 把要传送的数据写入SPDR寄存器
    6. 将nSCS置低,数据传送开始
    7. 等待数据传送结束
    8. 数据传送结束后,将nSCS置高
                             




    3.2 读操作

    进行读操作时,需首先将nSS置低,然后通过MOSI依次输出地址、OP代码、数据长度和哑元数据(dummy data),数据字节将从MISO管脚输入。OP=0是选择读操作,OP=1则是选择写操作。
    W5200的SPI支持单字节和多字节读操作。单字节读操作由4个指令组成:16位地址、1位OP代码(0)、15位数据长度和8位哑元数据;多字节读操作在发送读指令和数据长度后,需连续发送哑元数据。为区分单字节操作和多字节操作,需要定义数据长度。如果长度为1,则为单字节读操作,否则为多字节读操作。在nSS为低电平后,需将MISO置低。




    #define data_read_command    0x00
    uint16 addr;     //地址: 16bits
    int16 data_len;   // 数据长度 :15bits
    uint8 data_buf[];  // 数据数组
    SpiSendData();   // 由MCU传送数据到 W5200
    SpiRecvData();   // 由W5200接收数据到 MCU

    {
    ISR_DISABLE();  // 禁止中斷服務程序
    CSoff();  // CS=0, SPI 开始

    // Spi传送数据
    SpiSendData(((addr+idx) & 0xFF00) >> 8);   // 地址字節 1
    SpiSendData((addr+idx) & 0x00FF);    // 地址字節 2

    //读数据命令 + 数据长度上限 7bits
    SpiSendData((data_read_command| ((data_len& 0x7F00) >> 8)));
    // 最后的数据长度8bits
    SpiSendData((data_len& 0x00FF));  

    //读数据:在 data_len> 1, 突發读取處理模式(Burst Read Processing Mode)
    for(int idx = 0; idx<data_len; idx++)
    {
    SpiSendData(0);  // 虚拟数据(dummy data)
    data_buf[idx] = SpiRecvData(idx);  // 读数据
    }
    CSon();  //  CS=1, SPI 完结
    ISR_ENABLE();  // 禁止中断服务程序

    3.3 写操作

    在nSS置低后,依次在MOSI输出地址、OP代码、数据长度和数据字节。
    同样,W5200支持单字节写操作和多字节写操作。单字节写操作由4个指令组成:16位地址、1位OP代码(1)、15位数据长度和8位数据数组。单字节写操作时,数据长度需设置为1;而多字节写操作时,数据长度需设置为数据实际长度。在进行写操作时,在nSS进入低电平后,需将MSO置低。



    #define data_write_command    0x80
    uint16 addr;    //地址: 16bits
    int16 data_len;    //数据长度 :15bits
    uint8 data_buf[];  // 数据数组
    {
    SpiSendData();  //由MCU传送数据到 W5200

    ISR_DISABLE();// 禁止中断服务程序
    CSoff();// CS=0, SPI 开始

    SpiSendData(((addr+idx) & 0xFF00) >> 8);  //地址字節 1
    SpiSendData((addr+idx) & 0x00FF);  //地址字節 2

    // 写数据命令 + 数据长度上限 7bits
    SpiSendData((data_write_command | ((data_len& 0x7F00) >> 8)));
    // 最后的数据长度8bits
    SpiSendData((data_len& 0x00FF));

    //写数据:在 data_len> 1, 突發读取處理模式(Burst Read Processing Mode) 
    for(int idx = 0; idx<data_len; idx++)
    SpiSendData(data_buf[idx]);

    CSon();  // CS=1, SPI 完结     
    IINCHIP_ISR_ENABLE();  // 禁止中断服务程序
    }

     如果您有什么疑问请直接留言也可以登录我们的官网:http://www.wiznettechnology.cn
     
    或者来信:Tel: 86-10-84539974(转166),QQ:2464237212,邮箱:wiznetbj@wiznettechnology.com,联系人:Lily Zhang,谢谢!