Some people have been asking what is ECUHost? The simple answer is ECUHost OS is an automotive DIY operating system targeted at ARM Cortex-M micros, and the ECUHost V1.4 PCB is an example hardware module for the OS to run on.
The heart of the ECUHost V1.4 PCB is the NXP MK60 micro that features two CAN interfaces, 10/100 Ethernet, a multitude of timed, analog and digital I/O, and optionally a wifi module.
The OS and the V1.4 PCB are found in the GP-meter 6.0. The GP-meter 6.0 comes programmed with a boot-loader, the ECUHost OS Kernel, and an application to control the LSU4.2 sensor and display the result on the LCD display.
Boot-loader & Kernel
These components are the basis of the ECUHost OS. The boot-loader always runs at power up for 5 seconds. If a programming session doesn’t start, control jumps to the Kernel. This sequence is typical of pretty much all automotive electronic modules. If a programming session is needed, the boot-loader contains code that can update the software of the ECU.
The Kernel contains all of the functions needed for a user application to ‘make things happen’ at the outputs of the ECU, in response to the inputs of the ECU. The Kernel is stand-alone machine that ‘knows’ how to perform timed fuel injection, measure an input frequency, read a temperature sensor, send a message over the CAN bus as well as a multitude of other tasks.
It doesn’t have a mind of it’s own however – the Kernel only responds to requests from the user application. If there is no user application, the Kernel will pretty much sit in a loop doing nothing!
You can see in the above picture, the ECUHost (user) application sits on top of the software stack and is effectively the brains of the system. For example in the GP-meter 6.0, the user application measures and controls the LSU4.2 sensor temperature and pump current in order to calculate and display the air fuel ratio.
In the Rabbit ECU Project the user applications main task is to measure engine sensor inputs, calculate a fuel injection quantity and trigger a fuel injection pulse.
The way in which the user application interacts with the Kernel in ECUHost is by the Supervisor Call (SVC). This instruction is common to all ARM Cortex-M micros. Each SVC carries with it a function code, here are some examples of functions you can use with ECUHost OS:
|SetClientStartTask||Adds a user module start function to user functions list|
|SetClientCyclicTask||Adds a user module run function to user functions list|
|SetClientTerminateTask||Adds a user module stop function to user functions list|
|RequestIOResource||Requests exclusive use of a resource|
|SetupIOResource||Configures an IO resource e.g. analog input|
|SetupCTRLResource||Configures a control resource e.g. PID controller block|
|SetupSpreadResource||Sets up a map spread resource|
|SetupTableResource||Sets up a 2D table|
|SetupWorkingPage||Sets up the calibration page dimensions|
|SetupCrankTriggerEdgePattern||Sets up the crank trigger pattern|
|SetupSimpleCamSync||Sets up cam sync pattern|
|SetupSyncPointsPattern||Sets up the sync points pattern|
|ConfigureUserTEPMInput||Sets up a user managed on/off timed sequence|
|ConfigureKernelTEPMOutput||Sets up a kernel managed on/off timed sequence|
|SetupMapResource||Sets up a 3D table|
|PopulateADArray||Sets a list of ADC channels to convert|
|IterateCTRLResource||Runs a control resource once e.g. PID controller|
|CalculateSpread||Calculates the current spread e.g. MAP load spread|
|CalculateTable||Calculates a 2D table output based on input spreads|
|CalculateMap||Calculates a 3D table output based on input spreads|
|GetSpreadResult||Returns the current spread e.g. MAP load spread|
|GetDIOResource||Gets state of digital IO|
|AssertDIOResource||Turns on/off a digital IO output|
|TriggerADQueue||Starts an ADC conversion list|
|AppendTEPMQueue||Adds timed on/off sequence e.g. igniter output, PWM output|
|WriteDACQueue||Writes values to be output at DAC|
|GetTimerValue||Gets a hardware timer current value|
|GetCRC16||Gets CRC16 of the calibration page|
|CheckPartition||Checks the calibration page for validity|
|NVMWorkingCopy||Copies NVM calibration to working buffer|
|QueueCANMessage||Sends a CAN message|
|RequestIOBusTransfer||Requests data transfer on a serial IO|
ECUHost & Teensy
Teensy from pjrc.com is an ARM based DIY learning/interactive development PCB that I am porting ECUHost OS to. The beauty of Teensy is both its low cost and small size.
The tiny dimensions of Teensy are great for creating a small automotive electronics project. The size compares favourably with the ECUHost V1.4 PCB.
Teensy 3.5 features a BGA version of the NXP MK64 micro. The only downsides of using Teensy over ECUHost V1.4 are the loss of Ethernet and wifi as well a having only a single CAN bus and fewer analog inputs.
The result is still a very powerful DIY system, with a whopping 18 timers, 6 analog inputs, 5 general purpose IO and plenty of communications. If you are game to solder onto the underside Teensy SMD pads, you can even unlock some additional I/O!
The porting of ECUHost to Teensy is ongoing and will allow much smaller devices to be made DIY style. A sample boot-loader, Kernel and user application example will be available soon.