C2 端口支持

  1. 版权所有 2007 Rodolfo Giometti <giometti@enneenne.com>

本程序是自由软件;您可以根据自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它;无论是许可证的第2版,还是(由您选择)任何更高的版本。

本程序的发布是为了希望它有用,但没有任何担保;甚至没有适销性或特定用途适用性的暗示担保。详情请参阅GNU通用公共许可证。

概述

此驱动实现了Linux对Silicon Labs (Silabs) C2接口的支持,该接口用于微控制器的系统内编程。

使用此驱动,您可以无需EC2或EC3调试适配器即可重新编程系统内闪存。此解决方案在微控制器通过特殊GPIO引脚连接的系统中也很有用。

参考资料

C2 接口的主要参考资料位于 (https://www.silabs.com) Silicon Laboratories 网站],请参阅

但是,它实现了一个两线串行通信协议(位翻转),旨在实现在低引脚数 Silicon Labs 器件上的系统内编程、调试和边界扫描测试。目前,此代码仅支持闪存编程,但易于添加扩展。

使用驱动

驱动加载后,您可以使用sysfs支持获取C2port信息或读写系统内闪存

# ls /sys/class/c2port/c2port0/
access            flash_block_size  flash_erase       rev_id
dev_id            flash_blocks_num  flash_size        subsystem/
flash_access      flash_data        reset             uevent

最初,C2port访问是禁用的,因为您的硬件可能将这些线路与其他设备复用,因此,要访问C2port,您需要以下命令

# echo 1 > /sys/class/c2port/c2port0/access

之后,您应该读取连接的微控制器的设备ID和修订ID

# cat /sys/class/c2port/c2port0/dev_id
8
# cat /sys/class/c2port/c2port0/rev_id
1

然而,出于安全原因,系统内闪存访问尚未启用,要启用它,您需要以下命令

# echo 1 > /sys/class/c2port/c2port0/flash_access

之后,您可以读取整个闪存

# cat /sys/class/c2port/c2port0/flash_data > image

擦除它

# echo 1 > /sys/class/c2port/c2port0/flash_erase

并写入它

# cat image > /sys/class/c2port/c2port0/flash_data

写入后,您必须重置设备以执行新代码

# echo 1 > /sys/class/c2port/c2port0/reset