⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cp2200.txt

📁 CP2200手记,详细记录一些使用CP2200的问题
💻 TXT
📖 第 1 页 / 共 2 页
字号:
以太网芯片CP2200应用手记
CP2200复位初始化:
1、等待复位引脚上升;
2、等待晶体初始化完成。处理器将收到复位中断请求。
3、等待自身初始化完成。INT0中断状态寄存器(30页)检测初始化是否完成。
4、屏蔽中断(用32页和35页的INT0EN和INT1EN),默认状态下每次复位后所有中断使能。
5、用44页的IOPWR寄存器使能需要的活动、链接,或活动/链接LED灯。注LINK和ACTIVITY只有48脚封装的才可独立分开。
6、初始化物理层。

7、初始化MAC控制寄存器。

8、配置接收过滤器。

9、准备发送和接收包。

 

中断请求信号
芯片复位时,中断使能,可能过软件关闭。未处理中断可能过读自清除寄存器进行清除。
中断产生事件:

未完成包终止;
接收缓冲空;
接收缓冲满;
晶体初始化完成;
自初始化完成;
FLASH写/擦除完成;
包发送完成;
包接收完成;
“wake-on-lan"唤醒事件;
链接状态改变;

 

LED使能或关闭由IOPWR寄存器控制。

发送包:将发送数据写到发送缓冲,自动写寄存器的TXGO位写1启动发送。
接收完一包,产生中断。处理器可能过自动读接口读数据包。

内部存储器的寄存器:
处理器通过并口控制直接或间接寄存器,处理器接口接供一个8位地址空间。114个可用的直接寄存器区域。所有剩余的寄存器空间保留,不可读写。直接寄存器用于存取RAM缓冲,FLASH。MAC配置寄存器和其他状态/控制寄存器用于配置芯片功能。
接收和发送RAM缓冲共享相同的地址空间,使用RAMADDRH:RAMADDRL指针存取。每个缓冲有一个数据指示寄存器。FLASH是一个独立的地址空间。
发送缓冲0x0000-0x07ff,接收缓冲0x0000-0x0fff(FLASHADDRH:FLASHADDRL指针)


随机存取RAM发送和接收缓冲:
1、写一个目标地址到RAMADDRH:RAMADDRL.
2、发送缓冲:
   读写8位数据到RAMTXDATA读或写发送缓冲中的目标字节。
   
   接收缓冲:
   读或写8位数据到RAMRXDATA去读或写接收缓冲目标字节。
   
   注:
   
   
内部寄存器:
#define CPADDRH 0x21  //当前读包地址高字节(63页)
#define CPADDRL 0x22  //当前读包地址低字节(63页)
#define CPINFOH 0x1d  //当前读包信息高字节(61页)
#define CPINFOL 0x1e  //当前读包信息低字节(62页)
#define CPLENH  0x1f  //当前读包长度高字节(62页)
#define CPLENL 0x20   //当前读包长度低字节(62页)
#define CPTLB   0x1a  //当前读包TLB数(65页)
#define FLASHADDRH x69 //FLASH地址指针高字节(74页)
#define FLASHADDRL 0x68 //FLASH地址指针低字节(74页)
#define FLASHAUTORD 0x05 //FLASH自动读 W/增量(75页)
#define FLASHDATA 0x06   //FLASH读/写数据寄存器(75页)
#define FLASHERSE 0x6a   //FLASH擦除(76)
#define FLASHKEY 0x67    //FLASH锁存(74)
#define FLASHSTA 0X7B    //FLASH状态(73)
#define INT0  0x63 //中断状态寄存器0(自清除)(30页)
#define INT0EN 0x64 //中断使能寄存器0(32)
#define INT0RD 0x76  //中断状态寄存器(只读)(31)
#define INT1   0x7f  //中断状态寄存器1(自清除)(33)
#define INT1EN 0X7D  //中断使能寄存器1(35)
#define INT1RD 0x7e  //中断状态寄存器(只读34)
#define IOPWR  0x70  //端口输入输出电源(44)
#define MACADDR0x0a  //MAC地址指针(78)
#define MACDATAH 0x0b //MAC数据寄存器高字节
#define MACDATAL 0x0c //MAC数据寄存器低字节
#define MACRW 0x0d    //MAC读写开始(78)
#define OSCPWR 0x7c   //晶体电源(44)
#define PHYCF 0x79    //物理层配置(90)
#define PHYCN 0x78    //物理层控制(89)
#define PHYSTA 0x80   //物理层状态(91)
#define RAMADDRH 0x08 //RAM地址指针高字节(23)
#define RAMADDRL 0x09 //RAM地址指针低字节(23)
#define RAMRXDATA 0x02 //RXFIFO RAM数据寄存器(23)
#define RAMTXDATA 0x04 //TXBUFF RAM数据寄存器(23)
#define RSTEN 0x72     //复位使能寄存器(410
#define RXAUTORD 0x01  //RXFIFO 自动读 W/增量(60)
#define RXCN  0x11     //读控制(59)
#define RXFIFOHEADH 0x17 //读缓冲头指针高字节(69)
#define RXFIFOHEADL 0x18 //读缓冲头指针低字节(69)
#define RXFIFOSTA  0x5b  //读缓冲状态(70)
#define RXFIFOTAILH 0x15 //读缓冲尾部高字节(69)
#define RXFIFOTAILL 0x16 //读缓冲尾部低字节(69)
#define RXFILT  0x10     //读过滤器配置(60)
#define RXHASHH 0x0e    //接收HASH 表高字节(60)
#define RXHASHL 0x0f    //接收HASH表低字节(61)
#define RXSTA   0x12    //接收状态(59)
#define SWRST  0x75   //软件复位寄存器
#define TLB0ADDRH 0x27 //TLB0地址高字节
#define TLB0ADDRL 0x28 //TLB0地址低字节
#define TLB0INFOH 0x23 //TLB0信息地址高字节
#define TLB0INFOL 0x24 //TLB0信息地址低字节
#define TLB0LENH  0x25 //TLB0长度高字节
#define TLB0LENL 0x26  //TLB0长度低字节 
#define TLB1ADDRH 0x2D //TLB1地址高字节
#define TLB1ADDRL 0x2E //TLB1地址低字节
#define TLB1INFOH 0x29 //TLB1信息地址高字节
#define TLB1INFOL 0x2A //TLB1信息地址低字节
#define TLB1LENH  0x2b //TLB1长度高字节
#define TLB1LENL  0x2C //TLB1长度低字节
#define TLB2ADDRH 0x33 //TLB2地址高字节
#define TLB2ADDRL 0x34 //TLB2地址低字节
#define TLB2INFOH 0x2F //TLB2信息地址高字节
#define TLB2INFOL 0x30 //TLB2信息地址低字节
#define TLB2LENH  0x31 //TLB2长度高字节
#define TLB2LENL  0x32 //TLB2长度低字节

#define TLB3ADDRH 0x39 //TLB3地址高字节
#define TLB3ADDRL 0x3A //TLB3地址低字节
#define TLB3INFOH 0x35 //TLB3信息地址高字节
#define TLB3INFOL 0x36 //TLB3信息地址低字节
#define TLB3LENH  0x37 //TLB3长度高字节
#define TLB3LENL  0x38 //TLB3长度低字节
#define TLB4ADDRH 0x3F //TLB4地址高字节
#define TLB4ADDRL 0x40 //TLB4地址低字节
#define TLB4INFOH 0x3B  //TLB4信息地址高字节

#define TLB4INFOL 0x3C  //TLB4信息地址低字节
#define TLB4LENH  0x3D  //TLB4长度高字节
#define TLB4LENL  0x3E  //TLB4长度低字节
#define TLB5ADDRH 0x45  //TLB5地址高字节
#define TLB5ADDRL 0x46  //TLB5地址低字节
#define TLB5INFOH 0x41  //TLB5信息地址高字节
#define TLB5INFOL 0x42  //TLB5信息地址低字节
#define TLB5LENH  0x43  //TLB5长度高字节
#define TLB5LENL  0x44  //TLB5长度低字节

#define TLB6ADDRH 0x4B  //TLB6地址高字节
#define TLB6ADDRL 0x4C  //TLB6地址低字节
#define TLB6INFOH 0x47  //TLB6信息地址高字节
#define TLB6INFOL 0x48  //TLB6信息地址低字节
#define TLB6LENH  0x49  //TLB6长度高字节
#define TLB6LENL  0x4A  //TLB6长度低字节
#define TLB7ADDRH  0x51 //TLB7地址高字节 
#define TLB7ADDRL  0x52 //TLB7地址低字节
#define TLB7INFOH  0x4D //TLB7信息地址高字节
#define TLB7INFOL  0x4E //TLB7信息地址低字节
#define TLB7LENH   0x4F //TLB7长度高字节
#define TLB7LENL   0x50 //TLB7长度低字节
#define TLBVALID  0x1C  //TLB可用指示器
#define TXAUTOWR  0x03  //发送数据自动写
#define TXBUSY    0x54  //发送忙批示
#define TXCN      0x53  //发送控制
#define TXENDH    0x57  //发送数据结束地址高字节
#define TXENDL   0x58  //发送数据结束地址低字节
#define TXPAUSEH  0x55 //发送数据终止高字节
#define TXPAUSEL 0x56  //发送数据终止低字节
#define TXSTA0   0x62  //发送状态向量0
#define TXSTA1  0x61  //发送状态向量1
#define TXSTA2   0x60  //发送状态向量2
#define TXSTA3  0x5F   //发送状态向量3
#define TXSTA4  0x5E   //发送状态向量4
#define TXSTA5  0x5D    //发送状态向量5
#define TXSTA6  0x5C   //发送状态向量6
#define  TXSTARTH 0x59  //发送数据开始地址高字节
#define  TXSTARTL 0x5A //发送数据开始地址低字节
#define  VDMCN  0x13  //VDD监视控制寄存器

INT0.7  包结束--使用自动读接口,接收包的最后一个字节被读取
INT0.6  接收缓冲空--接收缓冲区中的最后一个包被卸载或丢弃.
INT0.5  芯片准备复位初始化
INT0.4  外部晶体已经稳定工作
INT0.3  一个FLASH写或擦除操作完成
INT0.2  发送接口完成一个发送包
INT0.1  接收缓冲满或达接收包的最大数.检测RXFIFOSTA状态寄存器了解接收缓冲状态
INT0.0  一个包被加到接收缓冲(接收到一个包)

INT1.5 设备连接到网络
INT1.4 设备已经连接到网络或断开
INT1.3 发送接口检测到和回应一个不清状况
INT1.2 自动协商失败.软件应当检测可用连接和得试自动协商auto-negotiation.
INT1.1 远程错误通知--远程错误(电缆或连接失败)被检测到.
INT1.0 auto-negotiation尝试完成,

复位源:

复位事件发生时:
所有直接和间接寄存器值初始化到复位值.
数字引脚(除/RST外)强制为高阻状态(弱上拉到VDD)
模拟引脚(除TX+/TX-,RX+,RX-外)强制为高阻状态,没弱上拉
外部晶体停振同时/RST驱动低(除软件复位外)
所有中断使能.

电压监控寄存器VDMCN
VDMEN(7)--监控使能(用于使能和关闭VDD监控电路) 
VDDSTAT(6)--VDD状态

软件复位:写1到SWRST的2位(RESET)强制进入复位状态

判断最后的复位源:RSTSTA寄存器.如果PORSI位设置为1,所有其他的RSTSTA将不定义.
SWRSI(2)--软件复位标志位.
PORSI(1)--上电,电源掉电,晶体停振复位标志位.
PINRSI--外部引脚复位.

RSTEN寄存器:
ESWRST(2)使能软件复位
EPFRST(1)电源掉电复位使能

电源管理模式:
正常模式(全速运行)
连接检测模式(发关关闭)
寄存器模式(发送和接收关闭)
掉电模式(晶体输出关闭)
通过将PHYCN(6)的TXEN清0,芯片由正常模式转为连接检测模式.通过PHYCN=00关闭物理层,然后重新使能物理层返回正常模式.
将PHYCN的相应三个位设为000进入寄存器模式,通过将这三位设为111返回正常模式.
掉电模式下只能通过上电或引脚复位进入正常模式 
进入掉电模式步骤:
1、关闭PHY(清除PHYCN的相应000)
2、清除IOPWR的2,3位00关闭LED驱动
3、将VDMEN(VDMCN.7)设为0关闭电源监控
4、OSCOE(OSCPWR.0)设为0关闭晶体输出。




发送界面:
以太网帧格式:
引导符和开始帧分隔符(8字节)->目标MAC地址(6字节)->源MAC地址(6字节)->第度/类型(2字节)->数据(46到1500字节)->CRC检测(4字节)

发送包步骤:
1、检测TXBUSY是否为00(空闲)
2、确定没忽略最后的发送包。如果TXSTA3寄存器的3-7为1,表示忽略了最后发送包。如果忽略了发送包,使用下面的步骤清楚忽略状态(注:添加任何包之前必须清除忽略状态)
A、设置TXSTARTH:TXSTARTL为0000。
B、设置TXENDH:TXENDL为0x0040.
C、写0x81到TXCN
D、检测TXBUSY是否空闲。
E、设置TXCN为0x00
F、再次检测忽略包。忽略包仅在半双工模式和过重的网络负荷下出现。
3、设置TXSTARTH:TXSTARTL发送缓冲指针为0x0000
4、通过写数据到TXQUTOWR装载数据到发送缓冲(第次写一个字节)
5、设置TXSTARTH:TXSTARTL发送缓冲指针为0x0000.
6、写1到TXGO(TXCN的0位)启动发送。

发送缓冲和自动写界面:

 


发送状态和控制寄存器:
TXCN:
OVRRIDE(7)--为0时TXCN的5,4,3,2,1位将无效。MAC设置有影响;为1。TXCN的5,4,3,2,1有用,MAC设置不考虑
CRCENOV(5)--CRC使能。
PADENOV(4)--

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -