| C2 port support |
| --------------- |
| |
| (C) Copyright 2007 Rodolfo Giometti <giometti@enneenne.com> |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| |
| |
| Overview |
| -------- |
| |
| This driver implements the support for Linux of Silicon Labs (Silabs) |
| C2 Interface used for in-system programming of micro controllers. |
| |
| By using this driver you can reprogram the in-system flash without EC2 |
| or EC3 debug adapter. This solution is also useful in those systems |
| where the micro controller is connected via special GPIOs pins. |
| |
| References |
| ---------- |
| |
| The C2 Interface main references are at (https://www.silabs.com) |
| Silicon Laboratories site], see: |
| |
| - AN127: FLASH Programming via the C2 Interface at |
| https://www.silabs.com/Support Documents/TechnicalDocs/an127.pdf |
| |
| - C2 Specification at |
| https://www.silabs.com/pages/DownloadDoc.aspx?FILEURL=Support%20Documents/TechnicalDocs/an127.pdf&src=SearchResults |
| |
| however it implements a two wire serial communication protocol (bit |
| banging) designed to enable in-system programming, debugging, and |
| boundary-scan testing on low pin-count Silicon Labs devices. Currently |
| this code supports only flash programming but extensions are easy to |
| add. |
| |
| Using the driver |
| ---------------- |
| |
| Once the driver is loaded you can use sysfs support to get C2port's |
| info or read/write in-system flash. |
| |
| # 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 |
| |
| Initially the C2port access is disabled since you hardware may have |
| such lines multiplexed with other devices so, to get access to the |
| C2port, you need the command: |
| |
| # echo 1 > /sys/class/c2port/c2port0/access |
| |
| after that you should read the device ID and revision ID of the |
| connected micro controller: |
| |
| # cat /sys/class/c2port/c2port0/dev_id |
| 8 |
| # cat /sys/class/c2port/c2port0/rev_id |
| 1 |
| |
| However, for security reasons, the in-system flash access in not |
| enabled yet, to do so you need the command: |
| |
| # echo 1 > /sys/class/c2port/c2port0/flash_access |
| |
| After that you can read the whole flash: |
| |
| # cat /sys/class/c2port/c2port0/flash_data > image |
| |
| erase it: |
| |
| # echo 1 > /sys/class/c2port/c2port0/flash_erase |
| |
| and write it: |
| |
| # cat image > /sys/class/c2port/c2port0/flash_data |
| |
| after writing you have to reset the device to execute the new code: |
| |
| # echo 1 > /sys/class/c2port/c2port0/reset |