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

📄 cp2200.txt

📁 CP2200手记,详细记录一些使用CP2200的问题
💻 TXT
📖 第 1 页 / 共 2 页
字号:
TXPPKT(3)--发送一个中止控制包。(中止控制包只能在全双工模式下使用)
BCKPRES(2)--
FDPLXOV(1)--全双工操作(1)
TXGO(0)--启动发送

 


接收界面:
4个接收缓冲,8个TLB,可同时保存8个包.每个TLB入口保存起始地址,长度和接收包的其他一些信息.
一旦接收到一个包,使用中断引脚通知主处理器。主处理器可以通过界面将数据包复制到内部存储区或
写一个1到RXSKIP(RXCN.1)跳过(忽略)这个包。跳过的包在存储区中但会被新的数据复盖。
接收界面有一个高级别的接收过滤器和HASH表以防止无用的包保存到接收缓冲。通过接收过滤器不支持所有的包类型。CP2200/1允许
主处理器可以随机的存取接收缓冲数据。主处理器可以检查包中的指定字节数据以便判断是否需要复制包。

使用自动读界面读一个包:
一旦复位初始化完成并且接收过滤器,接收缓冲和hash表已经初始化。CP2200/1将准备接收以太网数据包。
处理器接收到接收包中断可以通过下面的步骤进行读包:
1、读RXOK(CPINFOH.7)检查当前包是否被正确读取,主处理器可以随意的用包开始地址CPADDR去读指定的字节。
   判断是否需要复制还是跳过当前包。随机读取模式看7.1。
2、如果RXOK为0或跳过包,写1到RXSKIP(RXCN.1)
   如果RXOK为1 ,从CPLENH:CPLENL读当前包的长度.
3、读完整的包,一次只能读一个字节(通过读RXAUTORD)。
4、如果读取了完整的包,写1到RXCLRV(RXCN.2)。
   如果当前缓冲有一些未读的字节数据,写1到RXSKIP(RXCN.1)
   
   
初始化读缓冲,过滤器和hash表
芯片复位后,接收缓冲为空,过滤器配置为接收广播包和多播包,匹配的hash值为0x0400。这个hash值中止过滤器作用于控制包。
接收缓冲不需要作任何的初始化,接收过滤器可以配置为接收或忽略广播包,多播包,短小的包(以太网最小包为64字节),和检验出错的包。
接收过滤器使用RXFILT寄存器配置。
芯片可以配置为接收广播包和MAC地址匹配的包而可以不用hash表。如果可接收MAC为指定的其他地址的包,可以使用hash表去编程指定接收包的地址范围。
CP2200/1执行16位的hash表在64位地址空间描述所有可能的地址。hash描述的每一个MAC地址有65536种可能值。如果16位的每一位都为1,将接收所有地址
的数据包。如果16位的每一位都为0,那么将不接收任何地址的包。
检查设置指定地址的位步骤如下:
1、使用0xc704dd7b作为多项式执行6字节的32位CRC检验。
2、记录CRC结果的最小的有效4位(hash索引)
3、hash表中对应hash索引的位为1,将允许接收这个地址数据。如,如果CRC结果的最小有效4位为1010b(5d),那么,16位hash表中的位5被设置,将允许
其CRC结果是5D的MAC地址被接受。

RXCN接收界面控制器
RXINH(3)--接收约束位
    设置这个位临时禁止接收新包,如果正在接收一个包,将会接收完当前包。一旦设置,必须由软件重新启动接收。
RXCLRV(2)--有效位清楚
    写1到为个位清除当前包的有效位,释放缓冲。这相当于完整的读取当前包(CPEND=1)。
    如果包没读完,RXSKIP用于去忽略未接收的字节。
RXSKIP(1)--跳过当前包
    写1到这个位跳过当前包,自动读缓冲指针指到下一个包的起始位置。
RXCLEAR(0)--接收缓冲清除
    写1到这个位忽略所有接收缓冲的数据包,复位所有指针,有效位为0。
    
RXSTA接收界面状态:
CPEND(1)--当前包接收结束。
    当清除当前包的有效位(RXCLRV描述)或放弃当前包时这个位由硬件自动清除。
    0:当前包的最后一个字节没被自动读界面读取。
    1:当前包的最后一个字节已经被自动读界面读取。
RXBUSY(0)--正在接收包
    0:接收界面空闲
    1:接收界面正在接收一个包。

RXAUTORD接收自动读数据寄存器
     通过这个寄存器从接收缓冲读一个字节,调整接收缓冲指针RXFIFOHEAD
     
RXFILT接收过滤器
IGNRUNT(3)--忽略小包
    0:接收小包
    1:忽略小包   
IGNERR(2)--忽略FCC错误包
IGNMCST(0)忽略多播包

RXHASHH:多播hsah表高字节
RXHASHL:多播hash表低字节。

CPINFOH:当前包信息高字节。
RXVLAN(6)--VLAN类型 
    0:不检查VLAN标识帧
    1:检查VLAN标识帧。
RXUNSUP(5)--不支持控制帧
    0:不探测不支持控制帧
    1:探测不支持的控制帧
RXPCF(4)--中止控制帖
    0:不检测中止控制帧
    1:检测中止控制帧
RXCF(3)--控制帧
    0:不检测控制帧
    1:检测控制帧
RXADATA(2)--附加接收数据
    0:正常操作
    1:接收包的后面增加1到7位的附加位。
BCAST(1)--广播包
    0:当前包不是一个广播包
    1:当前包是一个广播包
MCAST:多播包
    0:当前包不是一个多播包
    1:当前包是一人多播包
    
CPINFOL当前包信息低字节    
RXOK(7)--接收完
    0:没接收完
    1:接收完
LENGTH(6)--长度类型域检测
    0:当前包的长度/类型域包括包长度
    1:当前包的长度/类型域包括包类型
LENERR(5)--长度检测出错位
    0:长度域没检测到错误
    1:长度域值与包实际长度不相符
CRCERR(4)--CRC错误
    0:CRC校验通过
    1:CRC校验失败
RXLEN(1)--接收长度
    0:正常模式
    1:接收的数据长度不够
RXDROP(0)--中止接收包
    0:正常接收
    1:中止一个接收包

CPLENH:当前包长度高字节
CPLENL:当前包长度低字节

CPADDRH:当前包地址高字节
CPADDRL:当前包地址低字节


接收缓冲操作由硬件自动完成,不需要处理器的任何干预。
注:最早接收到的包放在缓冲头部指针指向的起始地址开始处,这个包将作为当前包。自动读界面使用FIFO头部指针从当前包中读数据
自动读界面读数据时,随着一个包的读出,FIFO头部指针自动加1。一旦读出一个包,处理器必须通过写1到RXCLRV(RXCN.2)清除有效位。
如果处理器选择放弃当前包,必须写1到RXSKIP(RXCN.1)清除有效位。

当所有缓冲空闲或所有缓冲都满时产生接收FIFO FULL中断。处理器通过读RXFIFOSTA寄存器判断引起中断的事件。

CPTLB当前包的TLB序号(0-7)
TLBVALID TLB有效指示器,对应8个TLB的有效位,可同时清除,写0清除,写1无效。

TLBnINFOH:TLBn的信息高字节
地址:TLB0INFOH:0x23;TLA1INFOH:0x29;TLA2INFOH:0x2f; TLA3INFOH:0x35; TLA3INFOH:0x3b
TLA5INFOH: 0x41; TLA6INFOH:0x47; TLA7INFOH:0x4d.
RXVLAN(6)--VLAN类型检测
    0:没检测到VLAN标识帧
    1:检测到VLAN标识帧
RXUNSUP(5)--不支持控制帧
    0:不检测不支持控制帧
    1:检测不支持控制帧
RXPCF(4)--中止控制帧
    0:不检测中止控制帧
    1:检测中止控制帧
RXCF(3)--控制帧
    0:控制帧不检测
    1:控制帧检测
RXADATA(2):附加接收数据
    0:正常操作
    1:在接收包后面加上1到7位的数据附加位
BCST(1)--广播包
    0:不是一个广播包
    1:是一个广播包
MCAST(0)--多播包
    0:不是一个多播包
    1:是一个多播包
    
    
RXTITOSTA:接收FIFO状态寄存器
FIFOSTA[1:0]接收缓冲状态
    00:由于空间不足或已经接收了最大数量的包,最后通过过滤器接收的包没有加到接收缓冲.
    01:最后的数据包成功接收,并加到空间的缓冲.使用于缓冲中所有可用的空间
    10:最后的数据包成功接收,加到接收缓冲的第8位包位置.还有空闲的空间,最接收的包数据已经达到最大(8个)
    11:最后一个包成功接收,为每第8个包,使用了缓冲中的所有可用空间


片上FLASH.共8KB,可由处理器操作.,FLASH的最后6个字节(地址:0x1ffa到0x1fff)出厂时已经编写了一个唯一的MAC地址.这6个字节也是可擦写的
使用时多加小心以防将MAC擦除.

可编程FLASH
通过处理并口一次可编程一个字节数据.擦除操作一次操作512字节.FLASH写的擦除操作时序由硬件自动完成.不影响处理器并口.
使用FLASHADDRH:FLASHADDRL,FLASHDATA和FLASHERASE寄存器写和擦除FLASH.一旦一个FLASH操作开始,可用FLASHSTA寄存器监视其状态
或处理器等待中断信号.

FLASH擦除步骤
1、紧接着0xf1写0xa5到FLASHKEY
2、设置FLASHADDRH:FLASHADDRL到需要擦除的512字节内的任意地址。
3、写0x01值到FLASHERASE
4、检测FLASHSTA判断FLASH操作是否完成,可以能过FLASH擦写完中断开判断。

FLASH写步骤:
1、随着0xf1写0xa5到FLASHKEY
2、如果写入的值不是0xff,那么擦除这个字节所在的页
3、设置FLASHADDRH:FLASHADDRL到需要写入的字节所在地址。
4:将要写入的值写入到FLASHDATA寄存器
5、检测FLASHSTA判断操作是否完成,或等待中断。

读FLASH
使用FLASHADDRH:FLASHADDRL,FLASHDATA和FLASHAUTORD寄存器。
步骤:
1、设置FLASHADDRH:FLASHADDRL到要读的字节地址。
2、从FLASHDATA读出数据

多字节读取步骤:
1、设置FLASHADDRH:FLASHADDRL到要读取的地址
2、每读一次FLASHAUTORD读出一个字节


初始化MAC:
1、检测物理层是设置为半双工或全双工模式。
2、全双工模式写0x00b3,半双工模式写0x00b2到MACCF中
3、全双工模式写0x0015,半双工模式写0x0012到IPGT
4、写0x0c12到IPGR
5、编程48位MAC地址,写到MACAD0:MACAD1:MACAD2。
注:从FLASH中读出MAC地址,配置到以太网协议栈中
6、写0x0001到MACCN使能接收。

初始化物理层
1、指定双工模式或使能自适应模式.
2、使能或关闭LOOPBACK模式。
3、使能所需要的功能如:Receiver Smart Squelch,自动极性修正,连接完整性等
4、如果自动极性修正关闭,手工设定极性
5、使能物理层(PHYEN=1),发送和接收。
6、等待1US,
7、使能发送和接收(TEXN=1,RXEN=1)。
8、等待物理层时序,等待自适应完成(如果使能)
9、等待75MS
10、初始化MAC到同双工模式(全双工或半双工)。物理层双工模式可由PHYCN的DPLXMD位检测。
PHYCN--物理层控制寄存器
PHYEN(7)物理层使能。
TXEN(6)发送使能。
RXEN(5)接收使能
DPLXMD(4)全双工模式使能。
LBMD(3)回馈模式使能。
LPRFAULT(2)连接出错指示
POLREV(1)极性翻转指示
LINKSTA(0)连接状态指示

PHYCF--物理层配置寄存器
SMSQ(7)接收Smart Squelch使能位
LINKINT(6)连接完整性功能使能位
JABBER(5)JABBER保护功能使能位
AUTONEG(4)自适应模式使能位
ADRFAULT(3)
ADPAUSE(2)
AUTOPOL(1)自动极性检测使能位
REVPOL(0)极性翻转位

PHYSTA--物理层状态寄存器
LGCILF(7)
LGCLSF(6)
AKDLF(5)
AKDAMF(4)
AKDCMF(3)
ABDLF(2)
ABDAKMF(1)
ABDABMF(0)


间接访问MAC寄存器
通过4个直接映射寄存器MACADDR,MACDATAH,MACDATAL,MACRW间接存取MAC寄存器。
其操作步骤为:
1、写间接寄存器地址到MACADDR
2、如果将一个值写到间接寄存器,写一个16位值到MACDATAH:MACDATAL。
3、写任何值到MACRW去转送MACDATAH:MACDATAL中的内容到间接寄存器。
4、执行一个关于MACRW的读,将间接寄存器的内容传送给MACDATAH:MACDATAL。这样MACDATAH和MACDATAL可以直接读间接寄存器的内容。

⌨️ 快捷键说明

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