Embedded controller: Difference between revisions
RafaelOrtiz (talk | contribs) m (→To Do) |
(restructured, added info) |
||
Line 14: | Line 14: | ||
The need for an open implementation is due to the fact that the actual EC has some flakiness in the recovery process.(among many other things). |
The need for an open implementation is due to the fact that the actual EC has some flakiness in the recovery process.(among many other things). |
||
An example of a bug of the old EC can be found in {{ticket|477}} |
An example of a bug of the old EC can be found in {{ticket|477}} |
||
== Background == |
== Background == |
||
The EC, |
The EC, implemented as a KB3700, has a paramount importance in controlling the XO when the CPU is not active. To do so, the KB3700 communicates with the CPU via the [[Revised_EC_Port_6C_Command_Protocol|EC protocol]], this protocol is managed in the ports 0x66 and 0x62 of the KB3700. These two ports are serially connected with the 0x6C and 0x68 ports of the CPU. (for more info check [[Ec_specification]]). |
||
The KB3700 also communicates with the DS2657 (The battery charger) via the 1 wire Dallas protocol. |
The KB3700 also communicates with the DS2657 (The battery charger) via the 1 wire Dallas protocol. |
||
Line 33: | Line 32: | ||
ok to-file u:\ec-dump fload http:\\18.85.2.147\~joel\ec-dump.fth |
ok to-file u:\ec-dump fload http:\\18.85.2.147\~joel\ec-dump.fth |
||
⚫ | |||
⚫ | |||
⚫ | |||
= openec firmware project = |
|||
⚫ | |||
first you have to git-clone the open ec code, then inside the openec file make |
|||
openec is an effort for an open implementation of the firmware on the EC. |
|||
It currently is in an early stage and not functional yet. |
|||
Downloading openec to an XO '''might damage the XO''', please do not do |
|||
so unless you know what you are doing. |
|||
== Tools for openec == |
|||
; git : source revision tool |
|||
; sdcc : Compiler sdcc 2.7.0 or later (needed) http://sdcc.sf.net (Compiler which generates the binary for the EC) |
|||
; gcc : Compiler (optional for openec) the source is currently also compilable with GCC |
|||
; doxygen : Source documentation tool (optional), http://www.doxygen.org |
|||
; LaTeX : text tool (optional), needed if a pdf version of the documentation should be generated. Html version of the source documentation can be generated without LaTeX |
|||
; Srecord : srecord (needed), http://srecord.sf.net, handling of hex (etc.) files |
|||
; Make : (needed), GNU make, should be there anyway. |
|||
; D52 : Disassembler (optional), http://www.8052.com/users/disasm/ , generates disassembled file openec.d52 |
|||
; Download software : spiflash.dic (needed), see http://lists.laptop.org/pipermail/openec/2007-August/000061.html . Forth software to download the EC firmware to the target. Be sure to backup the complete firmware (including manufacturing data) first |
|||
; Hardware adapter : serial adapter (needed) http://wiki.laptop.org/go/Image:Serial_adapter.jpg Hardware adapter to download to target. Connects to CN24 and an RS232 null-modem cable (an additional oscillator is needed (66MHz(?) to CN24,Pin5)). Additional instructions are at [[SPI_FLASH_Recovery]]. (The instructions there address recovery of the complete flash) |
|||
; Jumpers : 2 jumpers for Recovery Mode jumper block (see above) |
|||
; Null modem cable : (needed) to connect the serial adapter to a serial port |
|||
; Serial port : (needed) Not all new PC and very few notebooks still have a serial port |
|||
; Terminal Software : minicom (recommended). Needed to see or capture debugging output. Parameters 115kBaud, 8N1, no handshake - other terminal programs can be used too. |
|||
== Related documentation == |
|||
http://wiki.laptop.org/go/Category.EC |
|||
http://sdcc.sourceforge.net/doc/sdccman.pdf |
|||
== Getting the source == |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
If the necessary tools are installed it is a simple "make" inside the openec directory: |
|||
make |
|||
Listing files and a binary file currently named ''openec.do_not_use.bin'' are generated. |
|||
(Intentionally no more details here about how to proceed:) |
|||
== Compiling on the host for the host == |
|||
Run make with an additional argument inside the openec directory: |
|||
make -f Makefile.gcc |
make -f Makefile.gcc |
||
you can then run |
|||
./openec.gcc |
|||
there. The EC specific hardware is not present on the host, |
|||
so openec.gcc will be of limited use. Running openec.gcc on the |
|||
host does not endanger the host:) |
|||
== Skeleton C implementation== |
== Skeleton C implementation == |
||
*battery.c Skeleton for battery handling with the Embedded Controller (key) |
*battery.c Skeleton for battery handling with the Embedded Controller (key) |
||
Line 49: | Line 92: | ||
*Makefile.gcc Makefile per gcc |
*Makefile.gcc Makefile per gcc |
||
*port_0x6c.c host communication routines for the EC of the OLPC |
*port_0x6c.c host communication routines for the EC of the OLPC |
||
*states.h Debugging state machine header |
|||
*uart.h Handle serial IO on the EC |
|||
*watchdog.h Handle watchdog of the EC |
|||
*battery.h Skeleton for battery handling with the Embedded Controller (key) |
|||
*ds2756.c Handle Maxim/Dallas DS2756 |
*ds2756.c Handle Maxim/Dallas DS2756 |
||
*kb3700.h kb3700.h - header file for ENE KB3700 Keyboard Controler |
*kb3700.h kb3700.h - header file for ENE KB3700 Keyboard Controler |
||
*matrix_3x3.c Routines to handle 3x3 matrix within the OLPC project |
*matrix_3x3.c Routines to handle 3x3 matrix within the OLPC project |
||
*port_0x6c.h Host communication routines for the EC of the OLPC |
|||
*timer.c Timer routines for the Embedded Controller of the OLPC project |
*timer.c Timer routines for the Embedded Controller of the OLPC project |
||
*unused_irq.c Safe IRQ stubs for unused IRQ |
*unused_irq.c Safe IRQ stubs for unused IRQ |
||
*build.c Keeps version related info |
*build.c Keeps version related info |
||
*ds2756.h Handle Maxim/Dallas DS2756 |
|||
*main.c Skeleton for the Embedded Controller of the OLPC project |
*main.c Skeleton for the Embedded Controller of the OLPC project |
||
*matrix_3x3.h Routines to handle 3x3 matrix within the OLPC project |
|||
*sfr_rw.c reading/writing mcs-51 sfr (special function registers) |
*sfr_rw.c reading/writing mcs-51 sfr (special function registers) |
||
*compiler.h include file to allow compiling with SDCC and GCC |
|||
*timer.h Timer routines for the Embedded Controler of the OLPC project |
|||
⚫ | |||
*unused_irq.h safe IRQ stubs for unused IRQ |
|||
*compiler.h SDCC compiler |
|||
⚫ | |||
*Makefile SDCC Makefile |
*Makefile SDCC Makefile |
||
*openec.ctl |
*openec.ctl Control file for D52 disassembler |
||
*states.c Debugging state machine header |
*states.c Debugging state machine header |
||
*uart.c handle serial IO on the EC |
*uart.c handle serial IO on the EC |
||
*watchdog.c Watchdog of the EC |
*watchdog.c Watchdog of the EC |
||
⚫ | |||
= Actual development = |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
''For info check [[Importing_your_project]]'' |
|||
== Desired Features == |
== Desired Features == |
||
* Failsafe Code |
* Failsafe Code |
||
* Easy debugging |
* Easy debugging |
||
* Forth/C implementation. |
|||
* GCC compilable. |
* GCC compilable. |
||
== To Do == |
== To Do == |
||
* |
* lots |
||
* 1 wire communication with the ds2756 |
|||
* Testing |
|||
== |
==Mailing list== |
||
* http://lists.laptop.org/listinfo/openec |
* http://lists.laptop.org/listinfo/openec |
||
=== For info you can always check === |
|||
* [http://lists.laptop.org/pipermail/openec/ openec archives] |
|||
[[Category:EC]] |
[[Category:EC]] |
Revision as of 14:37, 7 September 2007
Introduction
OLPC is now working in an Open Source implementation of the XO's Embedded Controller firmware.
The EC hardware consists of the ENE KB3700 (File:KB3700-ds-01.pdf), which has a 8051 microprocessor at it's core. We have chosen to impliment the firmware in C, using SDCC as our compiler. Efforts are also under way to have CamelForth, a Forth implimentation for the 8051, run on the KB3700.
The need for an open implementation is due to the fact that the actual EC has some flakiness in the recovery process.(among many other things). An example of a bug of the old EC can be found in #477
Background
The EC, implemented as a KB3700, has a paramount importance in controlling the XO when the CPU is not active. To do so, the KB3700 communicates with the CPU via the EC protocol, this protocol is managed in the ports 0x66 and 0x62 of the KB3700. These two ports are serially connected with the 0x6C and 0x68 ports of the CPU. (for more info check Ec_specification).
The KB3700 also communicates with the DS2657 (The battery charger) via the 1 wire Dallas protocol. One can deduce part of the internal state of the EC using ec-dump.fth under OpenFirmware. Running the ec-dump script give us valuable data about internals of the EC, being the EC_Register_Settings.
The procedure to run ec-dump over internet in a wireless connection is:
ok wifi media lab 802.11 *change it to your name AP ok fl http:\\18.85.2.147\~joel\ec-dump.fth *change to your AP IP direction
Running ec-dump over internet and saving the file in a USB key:
ok wifi media lab 802.11 *change it to your name AP ok fload http:\\18.85.2.147\~rafael\to-file.fth ok to-file u:\ec-dump fload http:\\18.85.2.147\~joel\ec-dump.fth
openec firmware project
openec is an effort for an open implementation of the firmware on the EC. It currently is in an early stage and not functional yet. Downloading openec to an XO might damage the XO, please do not do so unless you know what you are doing.
Tools for openec
- git
- source revision tool
- sdcc
- Compiler sdcc 2.7.0 or later (needed) http://sdcc.sf.net (Compiler which generates the binary for the EC)
- gcc
- Compiler (optional for openec) the source is currently also compilable with GCC
- doxygen
- Source documentation tool (optional), http://www.doxygen.org
- LaTeX
- text tool (optional), needed if a pdf version of the documentation should be generated. Html version of the source documentation can be generated without LaTeX
- Srecord
- srecord (needed), http://srecord.sf.net, handling of hex (etc.) files
- Make
- (needed), GNU make, should be there anyway.
- D52
- Disassembler (optional), http://www.8052.com/users/disasm/ , generates disassembled file openec.d52
- Download software
- spiflash.dic (needed), see http://lists.laptop.org/pipermail/openec/2007-August/000061.html . Forth software to download the EC firmware to the target. Be sure to backup the complete firmware (including manufacturing data) first
- Hardware adapter
- serial adapter (needed) http://wiki.laptop.org/go/Image:Serial_adapter.jpg Hardware adapter to download to target. Connects to CN24 and an RS232 null-modem cable (an additional oscillator is needed (66MHz(?) to CN24,Pin5)). Additional instructions are at SPI_FLASH_Recovery. (The instructions there address recovery of the complete flash)
- Jumpers
- 2 jumpers for Recovery Mode jumper block (see above)
- Null modem cable
- (needed) to connect the serial adapter to a serial port
- Serial port
- (needed) Not all new PC and very few notebooks still have a serial port
- Terminal Software
- minicom (recommended). Needed to see or capture debugging output. Parameters 115kBaud, 8N1, no handshake - other terminal programs can be used too.
Related documentation
http://wiki.laptop.org/go/Category.EC
http://sdcc.sourceforge.net/doc/sdccman.pdf
Getting the source
All the work is going to be in the git repository OpenEC
To get this code in your machine please do:
git-clone git://dev.laptop.org/projects/openec
Compiling on the host for the EC
If the necessary tools are installed it is a simple "make" inside the openec directory:
make
Listing files and a binary file currently named openec.do_not_use.bin are generated. (Intentionally no more details here about how to proceed:)
Compiling on the host for the host
Run make with an additional argument inside the openec directory:
make -f Makefile.gcc
you can then run
./openec.gcc
there. The EC specific hardware is not present on the host, so openec.gcc will be of limited use. Running openec.gcc on the host does not endanger the host:)
Skeleton C implementation
- battery.c Skeleton for battery handling with the Embedded Controller (key)
- Doxyfile Documentation file
- fs_entry.c Trampoline for a bankswitching routine
- Makefile.gcc Makefile per gcc
- port_0x6c.c host communication routines for the EC of the OLPC
- ds2756.c Handle Maxim/Dallas DS2756
- kb3700.h kb3700.h - header file for ENE KB3700 Keyboard Controler
- matrix_3x3.c Routines to handle 3x3 matrix within the OLPC project
- timer.c Timer routines for the Embedded Controller of the OLPC project
- unused_irq.c Safe IRQ stubs for unused IRQ
- build.c Keeps version related info
- main.c Skeleton for the Embedded Controller of the OLPC project
- sfr_rw.c reading/writing mcs-51 sfr (special function registers)
- compiler.h include file to allow compiling with SDCC and GCC
- failsafe/ Failsafe Code
- Makefile SDCC Makefile
- openec.ctl Control file for D52 disassembler
- states.c Debugging state machine header
- uart.c handle serial IO on the EC
- watchdog.c Watchdog of the EC
Forth tools
For doing some of the ec work you might need the sdkit tools (sdkit permits that forth runs over linux) and also some other openfirmware code like spiflash.dic
Desired Features
- Failsafe Code
- Easy debugging
- GCC compilable.
To Do
- lots