Embedded controller: Difference between revisions

From OLPC
Jump to navigation Jump to search
No edit summary
 
(27 intermediate revisions by 14 users not shown)
Line 1: Line 1:
{{OLPC}}
{{OLPC}}
{{Translations}}
{{Translations}}
{{Olpcboxtop}}
{{OBX source dev|projects/openec}}
{{Olpcboxbottom}}
== Introduction ==
== Introduction ==


The [[Hardware#XO_Laptop|XO-1 laptop]] uses a small micro-controller, an ENE KB3700 ([[Media:KB3700-ds-01.pdf|Datasheet]]), to control the battery charging operation and perform other tasks associated with starting and stopping the laptop.
OLPC is now working in an Open Source implementation of the XO's Embedded Controller firmware.


This Embedded Controller (EC) consists of a 8051 micro-controller, a dedicated LPC interface to communicate with the processor, and an SPI Flash ROM interface. The SPI Flash ROM supports two code segments, and a table of [[Manufacturing Data]]. The EC supports the Boot Hub Protocol, allowing the XO's main processor to boot from one of the code segments in the SPI Flash.
The EC hardware consists of the ENE KB3700 ([[Image: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 implementation for the 8051, run on the KB3700.


=== Background ===
== Details ==


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 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]] over a physical LPC interface. For more information, see the [[Ec specification]].


The KB3700 also communicates with the [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5104 DS2657] (battery fuel gauge IC within the battery back) via the [http://en.wikipedia.org/wiki/1-Wire 1-wire] Dallas protocol.
The KB3700 also communicates with the Maxim [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5104 DS2756] battery fuel gauge IC within the battery pack, via the [http://en.wikipedia.org/wiki/1-Wire 1-wire] Dallas protocol. [[Media:DS2756.pdf|DS2756 data sheet]].


=== ec-status ===
One can deduce part of the internal state of the EC using [http://dev.laptop.org/~joel/ec-dump.fth ec-dump.fth] under OpenFirmware.
Running the ec-dump script give us valuable data about internals of the EC, being the [[EC_Register_Settings]].
One can deduce part of the internal state of the EC using [http://dev.laptop.org/~joel/ec-dump.fth ec-dump.fth] under [[Open Firmware]]. Running the ec-dump script gives 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:
The procedure to run '''ec-dump''' over internet in a wireless connection is:
Line 28: Line 25:
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 ==
== Source and Licensing ==


The firmware running on the XO-1's EC, while heavily modified and supported by OLPC, was originally written by two different companies. OLPC had no success convincing those companies to open source their code.
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.


The OLPC community did work on [[OpenEC]], an Open Source implementation of the XO-1's Embedded Controller firmware. It reached an early stage and was not functional.
=== Tools for OpenEc ===


The XO-1.75 and XO-4 embedded controller firmware is open source. See [[Firmware]].
; 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. A html version of the source documentation can be generated without LaTeX
; Srecord : srecord (needed), http://srecord.sf.net, handling of hex (etc.) files (Version 1.36)
; 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 (an USB to serial adapter might be additionally needed then)
; 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 ===
== Related Documentation ==


*[[XO_Full_Reset|Rebooting the Embedded Controller in a laptop]]
http://wiki.laptop.org/go/Category.EC
*[[Media:KB3700-ds-01.pdf|ENE KB3700 Datasheet]]

* See other articles in [[:Category:EC]]
[[Media:KB3700-ds-01.pdf|ENE KB3700 Datasheet]]

http://sdcc.sourceforge.net/doc/sdccman.pdf

==== Mailing List ====

* http://lists.laptop.org/listinfo/openec

=== Getting the source ===

The source is in the git repository [http://dev.laptop.org/git.do?p=projects/openec;a=summary OpenEC] and can be browsed online there.

To get this code onto 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 | less
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:)

=== Files of the C implementation ===

battery.c Skeleton for battery handling with the Embedded Controller (key)
build.c Keeps version related info
compiler.h include file to allow compiling with SDCC and GCC
Doxyfile Control file for Source Documentation tool Doxygen
ds2756.c Handle Maxim/Dallas DS2756
failsafe/ Failsafe Code
fs_entry.c Trampoline for a bankswitching routine
kb3700.h kb3700.h - header file for ENE KB3700 Keyboard Controler
main.c Skeleton for the Embedded Controller of the OLPC project
Makefile.gcc Makefile for compiling with GCC
Makefile SDCC Makefile
matrix_3x3.c Routines to handle 3x3 matrix within the OLPC project
openec.ctl Control file for D52 disassembler
port_0x6c.c host communication routines for the EC of the OLPC
sfr_dump.c dump register settings
sfr_rw.c reading/writing mcs-51 sfr (special function registers)
states.c Helps debugging state machines
timer.c Timer routines for the Embedded Controller of the OLPC project
uart.c handle serial IO on the EC
unused_irq.c Safe IRQ stubs for unused IRQ
watchdog.c Watchdog of the EC

=== Status ===

Compilable, timer IRQ functional, blinks LEDs, decodes cursor keys,
uart output functional (TX, no RX), dumps registers outputs (ec-dump.fth like)
on boot and cursor key press, outputs status of internal
state machines onto serial line.
Reacts on Power button but does not power up the XO yet.

Status is tested on B1 and B2, yet to be confirmed for others.

=== Desired Features ===

* Failsafe Code
* Easy debugging
* GCC compilable.

=== To Do ===

* lots


[[Category:Hardware]]
[[Category:Developers]]
[[Category:EC]]
[[Category:EC]]
[[Category:Firmware]]
[[Category:Firmware]]
[[Category:SoC Project]]

Latest revision as of 04:05, 13 August 2013

  This page is monitored by the OLPC team.
  english | español | 한국어 HowTo [ID# 291388]  +/-  

Introduction

The XO-1 laptop uses a small micro-controller, an ENE KB3700 (Datasheet), to control the battery charging operation and perform other tasks associated with starting and stopping the laptop.

This Embedded Controller (EC) consists of a 8051 micro-controller, a dedicated LPC interface to communicate with the processor, and an SPI Flash ROM interface. The SPI Flash ROM supports two code segments, and a table of Manufacturing Data. The EC supports the Boot Hub Protocol, allowing the XO's main processor to boot from one of the code segments in the SPI Flash.

Details

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 over a physical LPC interface. For more information, see the Ec specification.

The KB3700 also communicates with the Maxim DS2756 battery fuel gauge IC within the battery pack, via the 1-wire Dallas protocol. DS2756 data sheet.

ec-status

One can deduce part of the internal state of the EC using ec-dump.fth under Open Firmware. Running the ec-dump script gives 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

Source and Licensing

The firmware running on the XO-1's EC, while heavily modified and supported by OLPC, was originally written by two different companies. OLPC had no success convincing those companies to open source their code.

The OLPC community did work on OpenEC, an Open Source implementation of the XO-1's Embedded Controller firmware. It reached an early stage and was not functional.

The XO-1.75 and XO-4 embedded controller firmware is open source. See Firmware.

Related Documentation