clause
- n. 条款;[计] 子句
MDIO Clause 45 和Clause 22
Contents MDIO History Theory of Operation Clause 22 Clause 45 References MDIO History Management Data Input/Output, or MDIO, is a 2-wire serial bus that is used to manage PHYs or physical layer de]
Contents
Management Data Input/Output, or MDIO, is a 2-wire serial bus that is used to manage PHYs or physical layer devices in media access controllers (MACs) in Gigabit Ethernet equipment. The management of these PHYs is based on the access and modification of their various registers.
MDIO was originally defined in Clause 22 of IEEE RFC802.3. In the original specification, a single MDIO interface is able to access up to 32 registers in 32 different PHY devices. These registers provide status and control information such as: link status, speed ability and selection, power down for low power consumption, duplex mode (full or half), auto-negotiation, fault signaling, and loopback.
To meet the needs the expanding needs of 10-Gigabit Ethernet devices, Clause 45 of the 802.3ae specification provided the following additions to MDIO:
The MDIO bus has two signals: Management Data Clock (MDC) and Managment Data Input/Ouput (MDIO).
MDIO has specific terminology to define the various devices on the bus. The device driving the MDIO bus is identified as the Station Management Entity (STA). The target devices that are being managed by the MDC are referred to as MDIO Manageable Devices (MMD).
The STA initiates all communication in MDIO and is responsible for driving the clock on MDC. MDC is specified to have a frequency of up to 2.5 MHz.
Clause 22 defines the MDIO communication basic frame format (figure 13) which is composed of the following elements:
Figure 13: Basic MDIO Frame Format
ST | 2 bits | Start of Frame (01 for Clause 22) |
OP | 2 bits | OP Code |
PHYADR | 5 bits | PHY Address |
REGADR | 5 bits | Register Address |
TA | 2 bits | Turnaround time to change bus ownership from STA to MMD if required |
DATA | 16 bits | Data Driven by STA during write Driven by MMD during read |
The frame format only allows a 5-bit number for both the PHY address and the register address, which limits the number of MMDs that the STA can interface. Additionally, Clause 22 MDIO only supports 5V tolerant devices and does not have a low voltage option.
In order to address the deficiencies of Clause 22, Clause 45 was added to the 802.3 specification. Clause 45 added support for low voltage devices down to 1.2V and extended the frame format (figure 14) to provide access to many more devices and registers. Some of the elements of the extended frame are similar to the basic data frame:
Figure 14: Extended MDIO Frame Format
ST | 2 bits | Start of Frame (00 for Clause 45) |
OP | 2 bits | OP Code |
PHYADR | 5 bits | PHY Address |
DEVTYPE | 5 bits | Device Type |
TA | 2 bits | Turnaround time to change bus ownership from STA to MMD if required |
ADDR/DATA | 16 bits | Address or Data Driven by STA for address Driven by STA during write Driven by MMD during read Driven by MMD during read-increment-address |
The primary change in Clause 45 is how the registers are accessed. In Clauses 22, a single frame specified both the address and the data to read or write. Clause 45 changes this paradigm. First an address frame is sent to specify the MMD and register. A second frame is then sent to perform the read or write.
The benefits of adding this two cycle access are that Clause 45 is backwards compatible with Clause 22, allowing devices to interoperate with each other. Secondly, by creating a address frame, the register address space is increased from 5 bits to 16 bits, which allows an STA to access 65,536 different registers.
In order to accomplish this, several changes were made in the composition of the data frame. A new ST code (00) is defined to identify Clause 45 data frames. The OP codes were expanded to specify an address frame, a write frame, a read frame, or a read and post read increment address frame. Since the register address is no longer needed, this field is replaced with DEVTYPE to specify the targeted device type. The expanded device type allows the STA to access other devices in addition to PHYs.
Additional details about Clause 45 can be found on the IEEE 802.3 workgroup website.
相关推荐
执行SQL报错
报错如下:
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
问题出现的原因:
MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”。)navicat执行下面:
select @@global.sql_mode
解决方案:
linux设置配置文件
vi /etc/my.cnf
最后添加
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
博主强烈推荐:https://blog.csdn.net/persistencegoing/article/details/84376427
希望大家关注我一波,防止以后迷路,有需要的可以加群讨论互相学习java ,学习路线探讨,经验分享与java求职
群号:721 515 304
问题
假设查询语句是下面这样:
SELECT d_1, create_date FROM table WHERE id = 1 GROUP BY create_date
报错就是这样,从网上找的方法无非三种:
- 为查找出的发生碰撞的字段加上any_value函数,于是就成了下面这种
SELECT any_value(d_1) create_date FROM table WHERE id = 1 GROUP BY create_date
什么叫发生碰撞?比如我这里以create_date 做聚合,查出来的d_1有三个值,分别是1、2、3,这就是碰撞,因为聚合之后某一列有了多个值。
2. 关闭ONLY_FULL_GROUP_BY模式。关于这个模式,是mysql提供的安全检查。 直接设置为一个新值就完事了:SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
注意:我在这里设置的值,是通过select @@sql_mode得到的结果,去掉ONLY_FULL_GROUP_BY得到的。以自己的配置为主,只要去掉ONLY_FULL_GROUP_BY就好(如果通过这种方法设置,重启mysql似乎就会失效,我没尝试过,不敢打包票)
3. 通过更改my.cnf实现。本质上和2是一样的,都是关闭ONLY_FULL_GROUP_BY模式。我是通过yum安装的mysql,所以直接编辑/etc/my.cnf,在文件的最后加上sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后通过
ystemctl restart mysqld.service
重启数据库。
总结
总的来说,我个人感觉1是最好的,因为不需要更改系统配置,但是也有缺陷,就是每个你进行分组的语句,都要为查找出来的字段加上any_value()函数。如果没有那么多讲究,完全可以用2或者3的方法解决这个错误。