拆解探索MagSafe电源接口结构和指示灯变颜色原理
你有没有想过一个Mac的MagSafe接头里面有什么? 控制光线是什么? 在Mac如何知道它是什么样的充电器? 本文探讨的MagSafe连接器内,并回答这些问题。
2006年由苹果公司推出的MagSafe接头十分方便,他靠磁力吸在Mac身上,插拔方便而且有人踢到电源线时会自动断开,而且不分反正。 连接器上的一个小LED灯改变颜色指示充电状态。
下面的图片显示了新的MagSafe 2连接器,很苗条,阵脚这样的排列方法使它可以不用区分反正。 充电器和计算机通过适配器检测引脚连通(也称为充电控制引脚),本文将在下面详细解释。 两个接地引脚比别的引脚稍长,所以当你插上连接器他们会首先接触,这点跟USB相同。
<ignore_js_op>

MagSafe接头拆解
我有一个MagSafe电源电缆发生故障导致燃烧的电源引脚,你可以看到下面的照片,我拆开看看里面究竟是什么。 下面的连接器是一个较旧的MagSafe,跟上边的Magsafe2相比还是有很大区别的。 还要注意,中间适配器引脚远远小于其他引脚,不像MagSafe2。
<ignore_js_op>

卸下塑料外壳里边有一块软塑料,也许是聚乙烯,有助于弥漫LED发出的光,并保护底下的电路。
<ignore_js_op>

切割掉保护电路板的透明塑料涂层,该充电器电线焊接此板的背面上。 只有两根线,电源线和地线连接到充电器。适配器针脚与充电器本身有没有数据通信。
<ignore_js_op>

拆卸连接器可以看到弹簧加载的“ 波戈销 “,可以形成物理连接到Mac。 塑料部件支撑着针脚,下图左侧的金属块并没有磁力,但可以被Mac的连接器的强力磁铁所吸引。
<ignore_js_op>

你可以在下图中看到MagSafe连接器的内部电路板非常小,在中间有两个LED,桔黄色/红色和绿色,左边是一个微小的芯片DS2413 1-Wire双通道可寻址开关 。 该芯片有两个功能:控制开关上的状态LED(即“双通道开关”部分),另外它也记录提供充电器的规格和序列号的ID值。
<ignore_js_op>

该芯片采用1-Wire协议 ,这是一个聪明的系统,可以通过一条线连接低速设备(加上接地)。 1-Wire系统很方便,在这里,Mac可以通过一个适配器检测引脚与MagSafe通信。
了解充电器的ID代码
您可以在Mac上轻松找到充电器信息(打开“关于本机”,“更多信息”,“系统报告”,“电源”),里边的瓦数和序列号很好理解,但ID、Revision和Family是哪来的? 事实证明,这些都是用于芯片内部连接器1-Wire协议的一部分。
<ignore_js_op>

1-Wire家族中的每一个芯片都有一个唯一的64位ID(如图可以看到为16进制,每4位可以表示一个数字)。 在1-Wire 标准中,64位ID由8位家族码识别1-Wire器件的类型,一个48位的唯一序列号,以及一个8位非加密的CRC校验用以验证ID是否正确。 这些公司(比如苹果)可以自定义ID号:顶端12位的序列号被用作一个客户ID,接下来的12位数据由客户指定的,而其余的24位为序列号。
有了这些信息,现在Mac的AC充电器信息来源可依了,下面的图显示了如何用64位ID映射充电器的信息。 ID字段100表明苹果的客户ID,在12位客户的数据(十六进制3C是十进制的60,表明60瓦)的功率和修订,家庭代码BA是1-Wire家族代码为DS2413的芯片。 因此,AC充电器信息实际上是1-Wire芯片的底层信息。
<ignore_js_op>

有些充电器信息可能是下图的样子,因为一些原因后来的充电器使用家族码为85,这并不代表这是一个85瓦的充电器。以MacSafe2为例,在客户ID中使用7A1表示45瓦,921表示60瓦,AA1表示85瓦。令人奇怪的是,这个85瓦充电器仍然包含60瓦的信息(16进制的3C)。
<ignore_js_op>

如何读ID号
读取MagSafe接头ID号码很容易,使用Arduino板和一个2K上拉电阻,以及Paul Stoffregen的Arduino 1-Wire库和简单的Arduino程序。
<ignore_js_op>

连接MagSafe连接器地线外和数据线内适配器感引脚可以让Arduino立即读取并显示的64位ID号,该充电器不需要接电。
<ignore_js_op>

用来在液晶屏上显示序列号的电路看起来比较复杂,其实只需要利用一个简单的程序,就可以将64ID号码显示出来。
<ignore_js_op>

控制MagSafe状态指示灯
Mac控制的MagSafe连接器灯光通过适配器引脚发送命令到DS2413 1-Wire开关IC控制两对LED的开启或关闭状态。 通过适配器针脚发送相应的命令到IC,一个Arduino可以随意控制LED。
<ignore_js_op>

<ignore_js_op>

充电器的启动过程
每次把 MagSafe 电源插到苹果电脑侧面的接口上时,会经过以下步骤:
插到电脑上之前,MagSafe 只维持大约 100 µA 的极弱电流
插头吸到苹果电脑上一瞬间,MagSafe 电源检测到上面说的那股极弱电流遇到了阻性负载,电阻值也吻合,于是开始全功率供电。苹果电脑检测到电源口有供电后,就通过接口中间那个触点读取 MagSafe 芯片里储存的身份信息,确认后就接受供电。
苹果电脑通过接口中间那个触点发送信号给 MagSafe 电源里的芯片,控制插头上那颗 LED 灯改变颜色以显示供电状态:电池充电中(橙色)还是电池已充满只给主机供电(绿色)。
拆解探索MagSafe电源接口结构和指示灯变颜色原理的更多相关文章
- [转]HTTP报文接口及客户端和服务器端交互原理
1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务.该模型的目的 ...
- JAVA的List接口的remove重载方法调用原理
前言 说真的,平常看源码都是自己看完自己懂,很少有写出来的冲动. 但是在写算法的时候,经常用到java中各种集合,其中也比较常用到remove方法. remove有重载函数,分别传入参数是索引inde ...
- postman项目接口文档和登录步骤原理
培训内容 实训项目:非常果岭-发现模块接口测试,单接口.流程脚本编写: 使用工具:postman 培训方式 1)postman使用说明 2)项目接口文档和登录步骤原理 一.首先了解postman使 ...
- 桥接模式:探索JDBC的接口
目录概要 场景问题 假设要设计一个电脑商场管理系统的某个模块设计,电脑分为品牌和类型两个纬度,我们应该怎么解决?我们初学者最容易想到的办法就是利用继承的方式,那利用继承实现的类图又是什么样子呢?我们看 ...
- Java8新特性探索之Stream接口
一.为什么引入Stream流 流是一系列与特定存储机制无关的元素--实际上,流并没有"存储"之说.使用流,无需迭代集合中的元素,就可以从管道提取和操作元素.这些管道通常被组合在一起 ...
- Java8新特性探索之函数式接口
一.为什么引入函数式接口 作为Java函数式编程爱好者,我们都知道方法引用和 Lambda 表达式都必须被赋值,同时赋值需要类型信息才能使编译器保证类型的正确性. 我们先看一个Lambda代码示例: ...
- 接口结构+一个selenium例子
大家今天可以先建一个项目目录,明天我们在码代码: 我看好多朋友都在看selenium方面的东西,在这里给大家一个和讯网自动发文章的selenium代码,有兴趣的朋友可以试试,船长已亲测可用,不明白的地 ...
- 支付宝接口(扫码支付的原理)使用文档说明 支付宝异步通知(notify_url)与return_url
支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url. 现支付宝的通知有两类. A服务器通知,对应的参数为notify_url,支付宝通知使用POST方式 B页面跳转通 ...
- 《android开发艺术探索》读书笔记(四)--View工作原理
接上篇<android开发艺术探索>读书笔记(三) No1: View的三大流程:测量流程.布局流程.绘制流程 No2: ViewRoot对应于ViewRootImpl类,它是连接Wind ...
随机推荐
- dede图集内容页调用
{dede:productimagelist} <li> <img src="[field:imgsrc/]" width="92" heig ...
- CRM (知识点)
插件 Django内置Admin Django Admin流程 ModelForm 自定义分页 curd 插件 权限 业务
- CodeIgniter典型的表单提交验证代码
view内容: <?php echo form_open('user/reg'); ?> <h5>用户名</h5> <input type="tex ...
- hdu 3537 翻硬币 每次能翻1个 或2个 或3个
N 枚硬币排成一排,有的正面朝上,有的反面朝上.我们从左开始对硬币按1 到N 编号. 第一,游戏者根据某些约束翻硬币,但他所翻动的硬币中,最右边那个硬币的必须是从正面翻到反面. 第二,谁不能翻谁输. ...
- NPOI 读取单元格的格式
最近做项目需要导入一部分数据, 导入的数据的中, 有部分的百分比数据使用的是excel 的百分比, 有部分的数据使用的是字符串形式的格式,(数据来源于不同的人统计), 格式略微有点乱, 要求导入系统的 ...
- 基于 Struts2 的单文件和多文件上传
文件的上传下载是 Web 开发中老生常谈的功能,基于 Struts2 框架对于实现这一功能,更是能够给我们带来很多的便利.Struts2 已经有默认的 upload 拦截器.我们只需要写参数,它就会自 ...
- Asp.Net Core2.0 WebAPI 使用Swagger生成漂亮的接口文档
1.引用NuGet: Swashbuckle.AspNetCore.Swagger Swashbuckle.AspNetCore.SwaggerGen 或 <PackageReference I ...
- mysql 判断两个字符串是否存在包含关系-------(1,2,3)与(2,3)
1.这里这个是目前有问题的 #创建FUNCTION DELIMITER ; CREATE FUNCTION `is_mixed`(str1 TEXT, str2 TEXT) RETURN ...
- Git配置用户名密码
配置Git 在Linux下和windows下配置Git的方法差不多,只是在Linux下,可以在命令行里直接使用git config进行配置, 而在windows下则要先打开“Git Bash”,进入m ...
- HDU - 1022 Train Problem I STL 压栈
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...