逆向工程一个未知的微控制器

2021-05-12 18:50:23

作为我对逆向工程eink价格标签的工作的一部分,我遇到了一个有趣的问题。一家特定的公司(三星电力机械/ SOLUM)从第三方芯片切换到我在下一代标签中向一个新芯片(Marvell 88MZ100)转换为新芯片。此芯片似乎是由它们制成的,为此目的。这从来没有逆向工程的钻点。一位朋友为我提供了一些包含此芯片的标签来玩。有两种类型的具有基于段的电子墨水显示器,并且具有正常的图形exink显示器。它们在它们上具有相同的主芯片,因此我从基于段的设备开始,因为它更容易理解更简单的未知系统。当然,从哪里开始,但是,那种谜题永远是最有趣的!

尝试解决填字游戏而不阅读问题是愚蠢的。尝试逆转工程师而不是首次收集已经存在的所有信息,同样愚蠢。那么,我们立即知道什么?无线协议可能与以前相同,因为没有公司想要尝试迁移到新的一个,或者为客户执行缓慢迁移的客户保持两个。旧协议是ZigBee的ZigBee - 如图2.4GHz,所以新的一个可能也是如此。我们也知道我们能看到的。在这里,您可以看到董事会两侧的照片(点击到Emmiggen)。那么,我们看到了什么?首先,成本优化的非常冷静的情况。他们将一个电子墨水屏幕直到PCB'当你有PCB时,谁需要导电玻璃背板?前面是一块导电塑料。但那是无关紧要的。我们看到两种天线,两者,鉴于它们的尺寸,2.4GHz。这是预期的,因为前一代设备也有两个2.4GHz天线。我们看到两个筹码。一个大小的一个。大一个(标记" sem9010")似乎有很多痕迹到显示器,而不是天线。显然它是显示控制器。小一(标记为" sem9110")似乎是操作的大脑。它连接到天线,到时序晶体,以及测试点,在那里有用于工厂编程。有12个垫子:一个连接到电池和#39; S正极端子,一个地面,其他10个是一个神秘的。在线搜索芯片名称在线产生任何价值 - 显然它是一种自定义的东西。但是谁设计了一个如此简单的东西的定制芯片?也许这只是一个重新品牌?我们必须更加努力!

好奇地,Google Image搜索有助于此处。它是有时逆向工程的意外但非常有用的工具。在这种情况下,它导致我们对此宝石(在这里存档后期)。这是一个Stackexchange问​​题,询问这些电子价格标签如何工作。有趣的原因是PCB照片张贴看起来几乎与我们的相同。芯片也一样,但它们有不同的标签!这可能是从Solum开始重新品牌的这些芯片之前。

我们怀疑是显示控制器的芯片标有SSD1623L2。这确实是段电子墨水显示控制器,支持多达96个段。搜索在线查找我们预发布版本0.1数据表(存档在这里用于后者)。这很好!如果我们知道如何与之交谈,我们可能能够识别与它交谈的代码,如果我们看到代码,那就是!

主MCU被揭示为一个ZBS242。好吧,好的。这不是我熟悉的微控制器。在互联网上搜索更多地发现我们是一个链接(存档这里的后者),SackkeXchange答案也提到。该页面位于韩语,但它表明,该芯片具有8051核心,以及一个相当可预测的外围设备集:UART,SPI,I2C,ADC,DAC,比较器,温度传感器,5通道PWM,3-CH TRIAC控制器,IR发射器,键扫描功能,RF唤醒,天线分集和ZigBiee兼​​容的无线电和Mac。该图像表明它还具有32kHz内部RC振荡器,并要求能够在睡眠模式下消耗1个UA。我猜这是为三星筹码的公司。有趣的...

一些更多搜索显示,我们的Mystery SEM9110的骰子也直接成像(在这里存档)。死亡要求是ZBS243。我猜这意味着有一系列筹码:ZBS24x。有趣的确。

打开另一个段标签提供了一些更好的消息:编程标题标记为清洁可读的金色字母!看起来标题具有SPI,UART,RESET PIN,供电,地面和称为&#34的引脚;测试",可能用于触发工厂测试模式。好奇者和好奇者。

逻辑上,假设的ZBS24x家族的最早成员将是" ZBS240"也许搜索这将导致某些东西?搜索" ZBS240"并过滤出谷壳导致在这里进行后期)。看起来这家公司按需制作定制帮派程序员。浏览其网站导致他们的编程设备的手册,甚至甚至下载PC侧实用程序要使用它。该实用程序甚至具有设备的固件更新程序。我看了看它,看看我是否可以从它开始编程设备,但固件是加密的。 PC-Side实用程序似乎只需通过USB串行端口向设备发送数据,因此也没有良好的信息。伤心...

一些搜索范围导致更有趣的页面(存档在这里为后者)。那是什么?它是出售吗?!?当然不是不再,对吧?好吧,以防万一,我确实通过电子邮件发送了公司。没有回复......作为最后一个冰雹玛丽通行证,我在香港询问了一个朋友,如果他知道韩国的任何人都可能试图联系这些家伙,因为他们的网站暗示他们希望从韩国银行作为付款的银行转账。当他回到我时,我自己不相信我的眼睛,事实上,事实上,他可以让我这个设备虽然在韩国代理!几天后,它由DHL到达!

有用!我可以读取和写入芯片!我花了一些时间来探索编程工具。芯片似乎有64KB的闪光和额外的1KB"信息块"我猜的是,用于存储校准值,MAC地址等。我使用程序员的精彩Saleae逻辑捕获了一些痕迹。你可以在这里下载它们。您可以在该存档中看到读取,擦除和编写InfoBlock和代码空间的跟踪。协议实际上非常简单!时钟速度可以是100kHz至8MHz之间的任何位置。

这一切都始于在适当的状态下设置线路:SCLK低,MOSI高,重置高,SS高。这是20ms的。接下来,重置为32ms。然后,在500kHz的SCK行上发送至少4个时钟周期。然后在复位之前观察到另一毫秒的延迟。现在可以建立通信前100毫秒延迟。在此之后,可以执行任何数量的事务。一些基本规则:在SS下降和发送字节之间,在一个字节和SS结束之间,最小的2US之间至少有5us,最小时间SS可以花费高度为2.5us。因此,每个字节都被发送:SS低,字节在SPI模式0中发送,SS高。而且,是的,SS为每个字节切换。

交易的长度为三个或四个字节。第一个字节是事务类型,最低位设置事务方向:零表示写入设备,一个是从设备读取的。命令0x02 / 0x03用于启动通信。程序员将发送三字节写入:02 BA A5,然后通过首先发送读命令和"地址&#34 ;: 03 ba然后主机在接收A5时发送FF。如果这是有效的,则考虑通信已建立。

命令0x12 / 0x13用于将SFR读入CPU(我稍后认为这一点,但实际上并不重要)。要选择InfoBlock,需要将SFR 0xD8设置为0x80,选择主闪存区域,需要设置为0x00。要进行值VV的写入RR,SPI数据为12 RR VV。要确认值写入,可以通过首先发送读取命令和#34;地址&#34 ;: 13 rr然后在接收VV时发送FF发送FF。

阅读闪光很容易。命令0x09用于此。它是一个四字节的命令。在命令字节之后,发送地址,首先是低字节然后低。然后主机在接收读取的字节时发送FF。是的。您需要一个单独的命令读取每个字节。写作也很容易。命令0x08用于此。它是一个四字节的命令。在命令字节之后,发送地址,首先是低字节然后低,然后发送要写入的字节。您也需要一个单独的命令,每个字节也写入。在写作之前不要忘记擦除。擦除也很容易。擦除InfoBlock只需要单个4字节命令:48 00 00 00。使用命令88 00 00 00擦除主闪光灯。

Warning: Can only detect less than 5000 characters

Warning: Can only detect less than 5000 characters

......