1 C2 port support 2 --------------- 3 4(C) Copyright 2007 Rodolfo Giometti <giometti@enneenne.com> 5 6This program is free software; you can redistribute it and/or modify 7it under the terms of the GNU General Public License as published by 8the Free Software Foundation; either version 2 of the License, or 9(at your option) any later version. 10 11This program is distributed in the hope that it will be useful, 12but WITHOUT ANY WARRANTY; without even the implied warranty of 13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14GNU General Public License for more details. 15 16 17 18Overview 19-------- 20 21This driver implements the support for Linux of Silicon Labs (Silabs) 22C2 Interface used for in-system programming of micro controllers. 23 24By using this driver you can reprogram the in-system flash without EC2 25or EC3 debug adapter. This solution is also useful in those systems 26where the micro controller is connected via special GPIOs pins. 27 28References 29---------- 30 31The C2 Interface main references are at (http://www.silabs.com) 32Silicon Laboratories site], see: 33 34- AN127: FLASH Programming via the C2 Interface at 35http://www.silabs.com/public/documents/tpub_doc/anote/Microcontrollers/Small_Form_Factor/en/an127.pdf, and 36 37- C2 Specification at 38http://www.silabs.com/public/documents/tpub_doc/spec/Microcontrollers/en/C2spec.pdf, 39 40however it implements a two wire serial communication protocol (bit 41banging) designed to enable in-system programming, debugging, and 42boundary-scan testing on low pin-count Silicon Labs devices. Currently 43this code supports only flash programming but extensions are easy to 44add. 45 46Using the driver 47---------------- 48 49Once the driver is loaded you can use sysfs support to get C2port's 50info or read/write in-system flash. 51 52# ls /sys/class/c2port/c2port0/ 53access flash_block_size flash_erase rev_id 54dev_id flash_blocks_num flash_size subsystem/ 55flash_access flash_data reset uevent 56 57Initially the C2port access is disabled since you hardware may have 58such lines multiplexed with other devices so, to get access to the 59C2port, you need the command: 60 61# echo 1 > /sys/class/c2port/c2port0/access 62 63after that you should read the device ID and revision ID of the 64connected micro controller: 65 66# cat /sys/class/c2port/c2port0/dev_id 678 68# cat /sys/class/c2port/c2port0/rev_id 691 70 71However, for security reasons, the in-system flash access in not 72enabled yet, to do so you need the command: 73 74# echo 1 > /sys/class/c2port/c2port0/flash_access 75 76After that you can read the whole flash: 77 78# cat /sys/class/c2port/c2port0/flash_data > image 79 80erase it: 81 82# echo 1 > /sys/class/c2port/c2port0/flash_erase 83 84and write it: 85 86# cat image > /sys/class/c2port/c2port0/flash_data 87 88after writing you have to reset the device to execute the new code: 89 90# echo 1 > /sys/class/c2port/c2port0/reset 91