cros ec
note: this page is a stub. someone should help me by expanding it
cros_ec, the Embedded Controller or just EC for short, is a microcontroller present on all Chromebook models. It handles power states, battery charging, LEDs (including the keyboard backlight), sensors, and some input devices. Depending on the platform, it can have several additional tasks; for instance, on some boards, it also handles the microphone.
Unlike conventional laptops, cros_ec's firmware is fully open source. The first version is easily buildable given a generic arm-none-eabi toolchain (and a few trivial source patches, if you're building on plain Linux); Newer boards switched to Zephyr RTOS, which at the present requires a ChromeOS chroot.
Architecture
Based on chips by a variety of manufacturers, including Nuvoton and ITE. (expand this list please)
In most cases, EC has a separate SPI flash divided into two parts: EC_RO and EC_RW. EC_RO is supposed to be only written by the factory, while EC_RW updates get shipped within coreboot.rom, and flashed on runtime if the hash mismatches. this behavior is actually quite complicated and should be explored deeper, especially around softbricks due to newer EC_RW version than the one in coreboot
Common misconceptions
- cros_ec != Cr50/Ti50 != SuzyQ
Cr50 is a completely separate chip on the board. This is why in most cases you can recover a bad EC flash with a SuzyQ cable; Cr50's firmware never gets touched outside the factory.