Skip to content
Clark Wang edited this page May 19, 2025 · 6 revisions

Board Remote Control Utilities(BCU) Release Notes

Ver. 1.1.118

2025.5.7

Revision History

DATE Release notes DESCRIPTION MODIFIED BY
2025.5.7 Bcu_1.1.118 Correct the gpio name for imx943evk19a0 and imx943evk19b1 Xiaoning Wang
2025.5.6 Bcu_1.1.117 Fix eeprom content of imx943evk19b1 Xiaoning Wang
2025.4.29 Bcu_1.1.115 Add i.MX943 19x19 EVK proto1 and proto2 support
Some bug fixes. Please pay attention to NOTE in List of available commands & their functions
Xiaoning Wang
2024.9.2 Bcu_1.1.100 Some bug fixes. Please pay attention for the usage of M7 UART on i.MX95. Xiaoning Wang
2024.8.1 Bcu_1.1.92 Add imx8ulpwatchref board support Xiaoning Wang
2024.7.4 Bcu_1.1.89 i.MX91 boot mode fix Xiaoning Wang
2024.6.4 Bcu_1.1.88 Add i.MX93 14x14 EVK support Xiaoning Wang
2024.5.8 Bcu_1.1.79 Add i.MX95 15x15 EVK support
Add i.MX91 11x11 EVK support
Add i.MX91 QSB support
Xiaoning Wang
2023.12.15 Bcu_1.1.75 Add i.MX95 19x19 EVK support
Show SN when use lsftdi command
Xiaoning Wang
2023.6.6 Bcu_1.1.68 Remove the unsupported gpio pins on imx93qsb Xiaoning Wang
2023.5.16 Bcu_1.1.67 Add some new boards support Xiaoning Wang
2022.4.22 Bcu_1.1.52 Add imx93evk11 support Xiaoning Wang
2022.3.16 Bcu_1.1.47 Add imx8ulpwatchval support Xiaoning Wang
2022.3.8 Bcu_1.1.45 Add imx8ulpevkb2 support Xiaoning Wang
2021.12.13 Bcu_1.1.38 Bug fix Xiaoning Wang
2021.10.26 Bcu_1.1.37 Support i.MX8ULP-EVK9 Xiaoning Wang
2021.9.15 Bcu_1.1.36 Support temperature sensor Xiaoning Wang
2021.8.31 Bcu_1.1.35 Support server function Xiaoning Wang
2021.8.12 Bcu_1.1.30 Support val_board_2 Xiaoning Wang
2021.8.2 Bcu_1.1.29 Improve sampling speed Xiaoning Wang
2021.6.8 Bcu_1.1.28 Add DXL EVK C1 board support;
Bug fix
Xiaoning Wang
2021.5.6 Bcu_1.1.26 Fix the path of bcu_config.yaml Xiaoning Wang
2021.4.2 Bcu_1.1.25 License check Xiaoning Wang
2021.3.19 Bcu_1.1.24 Add OpenOCD debug usage(Section 2.7) Xiaoning Wang
2021.3.9 Bcu_1.1.24 Fix upgrade extension name issue;
Remove the comma at the end of every line of csv file;
Support Snap Store
Xiaoning Wang
2021.3.1 Bcu_1.1.18 Generate executable files separately for Ubuntu20;
Bug fixes;
Xiaoning Wang
2021.1.26 Bcu_1.1.7 Support imx8ulpevk;
Improve get boot mode print;
Add -boothex= and -bootbin= to support setting more boot mode by users;
Xiaoning Wang
2021.1.12 Bcu_1.1.1 Support macOS 11.x;
Improve yaml config file version update function
Xiaoning Wang
2021.1.7 Bcu_1.0.253 Change -avg to -stats to dump all avg/max/min values in dump file; Xiaoning Wang
2020.12.11 Bcu_1.0.246 Add imx8ulpevk board support;
Add imx8mpevkpwra1 support;
Improve the eeprom check function.
Xiaoning Wang
2020.11.27 Bcu_1.0.237 Add dump_avg when dump data to csv file in monitor function.
Disable auto find board function in default.
Xiaoning Wang
2020.11.5 Bcu_1.0.230 Add FTDI and AT24Cxx EEPROM support for Linux and Windows version;
Support auto recognize board by reading eeprom data
Xiaoning Wang
2020.9.1 Bcu_1.0.220 Add the get_boot_mode command to read the boot mode set by BCU;
Fix https access issue
Xiaoning Wang
2020.9.1 Bcu_1.0.216 Fix dump file rail name issue;
Fix the problem of low data accuracy of GROUP in dump file
Xiaoning Wang
2020.8.25 Bcu_1.0.212 add [-hold=] option for reset command and bug fix Xiaoning Wang
2020.8.18 Bcu_1.0.209 Add get_level command and bug fix Xiaoning Wang
2020.8.14 Bcu_1.0.205 Update imx8dxlevk sense resistors’ value Xiaoning Wang
2020.8.13 Bcu_1.0.203 Add onoff command
Support imx8dxlevk-proto1b
Xiaoning Wang
2020.8.6 Bcu_1.0.195 show rms values for power as well when set [-rms] options Xiaoning Wang
2020.7.28 Bcu_1.0.184 fix the bipolar flag lost issue Xiaoning Wang
2020.7.16 Bcu_1.0.179 Add function to download PDF version of release note Xiaoning Wang
2020.7.16 Bcu_1.0.177 Add version compare function Xiaoning Wang
2020.7.14 Bcu_1.0.175 Use bipolar as default Xiaoning Wang
2020.7.13 Bcu_1.0.173 Add libcurl as a static lib on Linux version Xiaoning Wang
2020.7.8 Bcu_1.0.166 Add hwfilter, bipolar and upgrade functions Xiaoning Wang
2020.7.1 Bcu_1.0.158 Add groups editing function in the configuration file Xiaoning Wang
2020.6.18 Bcu_1.0.153 Add groups for 8dxlevk and 8mpevkpwr Xiaoning Wang
2020.5.15 Bcu_1.0.151 Switch libyaml to submodule Xiaoning Wang
2020.5.12 Bcu_1.0.139 Support 8MPDDR3L and some new features about config file Xiaoning Wang
2020.5.6 Bcu_1.0.133 Support yaml config file Xiaoning Wang
2020.4.29 Bcu_1.0.130 Support two i.MX8MP VDBs Xiaoning Wang
2020.4.7 Bcu_1.0.128 New features & bug fix Xiaoning Wang
2020.3.31 Bcu_1.0.119 New features & bug fix Xiaoning Wang
2020.3.27 Bcu_1.0.117 Create this doc Xiaoning Wang

1 Introduction

Welcome to BCU (Board Remote Control Utilities).

BCU is a software specially designed to control boards/platforms that support remote control. It provides functions such as on/off key operation, board reset, setting boot mode, controlling GPIO, and power measurement through the debug cable.

This software supports three versions of Windows, Linux and macOS, and the usages are similar.

  • Remote Control function:
$ sudo ./bcu reset sd \[-board=xxx\]
version bcu_1.0.158-0-gdb0a8e5
Auto recognized the board: imx8dxlevk
set reset high successfully
set onoff high successfully
set ft_reset high successfully
ENABLE remote control
set sd_pwr high successfully
set sd_wp high successfully
set sd_cd high successfully
set boot mode successfully
set bootmode_sel low successfully
Set ALL sense resistances to smaller ones
rebooting...
reset successfully
done
  • Power measurement function:

$ sudo ./bcu monitor -hz=1 [-board=xxx]

power measurement

This document contains important information about the BCU software, including software features and their usages, known issues, and limitations on use.

Source code and more information are available at Github.

1.1 Running environment

  • Windows 10, 64bit
  • Ubuntu 16.04, 64bits
    • Please install BCU from Snap Store, no libs need to be installed.
      • $ sudo snap install --devmode bcu-nxp; sudo snap alias bcu-nxp bcu
    • If you do not want to run BCU as root in Linux, please follow the steps below to set the rules.
      • $ cd /etc/udev/rules.d/
      • $ sudo vim xx-ftdi.rules
      • Add the line to this file: SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", GROUP="dialout", MODE="0660"
      • Save the file
      • Re-plug the debug wire
  • Ubuntu 18.04 or above, 64bits
    • Need install libftdi, libyaml-dev and openssl
      • $ sudo apt-get install libftdi1-2 libyaml-dev openssl lsb_release libssl-dev libconfuse-dev
    • If you do not want to run BCU as root in Linux, please follow the steps below to set the rules.
      • $ cd /etc/udev/rules.d/
      • $ sudo vim xx-ftdi.rules
      • Add the line to this file: SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", GROUP="dialout", MODE="0660"
      • Save the file
      • Re-plug the debug wire
  • macOS 14.x Sonoma or above, x64
    • Need install Homebrew firstly
      • $ /bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"
    • Then install other libs by Homebrew
      • $ brew install libftdi libyaml
    • The binary is only tested under macOS 14.0. It may work in the previous version of macOS.
  • macOS 14.x Sonoma or above, arm64
    • Apple Silicon can run x64 binary with Rosetta 2, but all libs should be installed to the path which is same as x64.
      • $ arch -x86_64 $SHELL
      • $ /bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"
    • Install other libs by Homebrew to default path(/usr/local/Cellar)
      • $ brew install libftdi libyaml

1.2 License

BCU is licensed under the BSD license. See LICENSE.

2 Usage Examples

2.1 Typical Usage

$ sudo ./bcu command \[-options\]

  1. Connect the computer and the board through the debug cable;
  2. Power on the board;
  3. Check the ID of the board. When connecting multiple boards to the same computer, you need to add “-id=[your board id]” after the command to specify the board needed controlled. If only one board is connected, this option is not needed;
$ sudo ./bcu lsftdi
version 1.0.117-1-g92abee9
number of boards connected through FTDI device found: 1
board\[0\] location_id=**\[your board id\]**
done
  1. Check supported boards;
  $ sudo ./bcu lsboard
  1. Check supported GPIO of the board;
  $ sudo ./bcu lsgpio -board=imx8dxlevk
  1. Check the boot modes supported by the board;
  $ sudo ./bcu lsbootmode -board=imx8dxlevk
  1. Reset the board and boot to the selected boot mode;
  $ sudo ./bcu reset **\[BOOTMODE_NAME\]** -board=imx8dxlevk \[-hold=\]
  1. Using the power measurement function;
  $ sudo ./bcu monitor -board=imx8dxlevk

When measuring power, you can use the [-dump=xxx] option to output data to a "xxx.csv" file with a specified file name at the same time.

  1. Set the boot mode;
  $ sudo ./bcu set_boot_mode emmc -board=imx8dxlevk
  1. Set a GPIO to low for 3 seconds;
  $ sudo ./bcu set_gpio onoff 0 -hold=3000 -board=imx8dxlevk
  1. Get a GPIO level state;
  $ sudo ./bcu get_level pmic_stby -board=imx8dxlevk

2.2 List of available commands & their functions

Commands Descriptions
reset [BOOTMODE_NAME]
[-boothex=]
[-bootbin=]
[-hold=]
[-board=] [-id=]
[-auto] [-keep]
reset the board, this command will init board firstly. [-hold=] means the time (unit: ms) to hold reset pin low level.
NOTE:
When BCU exits, it will de-assert remote_en pad by default. So the most of BCU settings will not take effect. If you want to keep the BCU settings after BCU exited, please add [-keep] option.
At the same time, please note that after BCU exits, the second serial port of the FTDI chip will also be restored. During use, please pay attention to the possible changes in serial port numbers.
onoff [-hold=]
[-board=] [-id=]
[-auto] [-keep]
Simulate pressing the ON/OFF button once for [-hold=] time (unit: ms)
NOTE:
When BCU exits, it will de-assert remote_en pad by default. So the most of BCU settings will not take effect. If you want to keep the BCU settings after BCU exited, please add [-keep] option.
At the same time, please note that after BCU exits, the second serial port of the FTDI chip will also be restored. During use, please pay attention to the possible changes in serial port numbers.
init [BOOTMODE_NAME]
[-boothex=]
[-bootbin=]
[-board=] [-id=]
[-auto]
enable the remote control with a boot mode
deinit [BOOTMODE_NAME]
[-board=] [-id=]
[-auto]
disable the remote control
monitor
[-board=] [-id=]
[-auto]
[-dump/-dump=]
[-stats] [-pmt]
[-nodisplay]
[-hz=] [-rms]
[-hwfilter]
[-unipolar]
[-temp]
switch into a tui windows that monitors voltage, current and power consumption inside the board
server
[-board=] [-id=]
[-auto]
[-hwfilter]
[-unipolar]
Set up a TCP server to respond to the "request data" and "quit" requests from the clients connected to 0.0.0.0:65432.
eeprom
[-board=] [-id=]
[-auto]
[-w][-r][-erase]
[-brev=][-srev=]
EEPROM read and program.
If use [-w] to program EEPROM, [-board=] is needed.
temp
[-board=] [-id=]
[-auto]
Get temperature of the SoC from sensor.
get_level
[GPIO_NAME]
[-board=] [-id=]
[-auto]
get level state of pin GPIO_NAME, support FTDI’s GPIOs and i2c expansion’s pins.
set_gpio [GPIO_NAME][1/0]
[-board=] [-id=]
[-auto]
set pin GPIO_NAME to be high(1) or low(0)
set_boot_mode [BOOTMODE_NAME]
[-boothex=]
[-bootbin=]
[-board=] [-id=]
[-auto]
set BOOTMODE_NAME as boot mode
get_boot_mode
[-board=] [-id=]
read the BOOTMODE_NAME set by BCU
lsftdi [-auto] show the list of connected boards and the their location IDs
lsboard list all supported board models
lsbootmode
[-board=][-auto]
show a list of available boot mode of a board
lsgpio [-board=]
[-auto]
show a list of available GPIO pins of a board
version show version number
upgrade [-doc] [-pre] Get the latest BCU from Github automatically.
help show list of available commands and their functions, as well as options

2.3 General options for all commands

Options Descriptions
[-board=MODEL] Set the board model, list of available models is shown in lsboards command
[-id=ID] Select the target board with location id(when there are multiple boards), the location id can be viewed by using command lsftdi
[-auto] Find the board on the host automatically. This function need EEPROM support. Please check Section 2.5 for more details.
[BOOTMODE_NAME] Setting boot mode as the booting method. If the option
[BOOTMODE_NAME] is not provided, the board will boot from the Boot Switch on the board.
[-boothex=] Setting boot mode with the hex value. In case the BOOTMODE_NAME does not include all boot modes.
For example:
$ sudo ./bcu reset -boothex=0x1A -board=xxx
$ sudo ./bcu reset -boothex=1A -board=xxx
[-bootbin=] Setting boot mode with the binary value. In case the BOOTMODE_NAME does not include all boot modes.
For example:
$ sudo ./bcu reset -bootbin=1001 -board=xxx

2.4 Options for specific command

  • reset command
Options Descriptions
[-delay=DURATION] Reset after DURATION ms
[-hold=] Time (unit: ms) to hold reset pin low level.
  • monitor command
Options Descriptions
[-dump] Dump data into “monitor_recode.csv” file, which can be imported to excel.
[-dump=FILENAME] Dump data into a “FILENAME.csv” file, which can be imported to excel.
[-stats] Dump statistical data(include AVG/MAX/MIN) for each rails’ current and voltage value in the end of the csv file.
[-pmt] Dump the csv file’s format aligns with the PMT tool. So the csv file can be imported to the PMT.
[-nodisplay] Will not show data value in real time, just dump data to file in the background. This will help to improve sample speed.
It will auto select -dump option.
[-hz=] Unit: Hz, support float number.
It can change the display refresh frequency on terminal. Low refresh frequency will help to improve sample speed on Windows.
usage:
- Windows: > .\bcu.exe monitor [-board=xxx] -hz=”0.5”
- Linux: $ sudo ./bcu monitor [-board=xxx] -hz=0.5
[-rms] Show Root-Mean-Square instead of normal Average of all Current and Power data.
[-hwfilter] 8x Hardware Filter
Voltage and current values will be read from avg register which contain a rolling average of the eight most recent VBUS/VSENSE results.
[-unipolar] Change the current measurement range from (-100mA100mA) to (0mA100mA).
**NOTE:**The PAC's bipolar mode enabled by default can report negatives values. This feature allows better precision in low power modes because it can sense signal's noise or capacitor's charge/discharge for example. However, users can switch in unipolar mode by using this option.
[-temp] Show the temperature of SoC. If [-dump] is set as well, the temperature data will be dump in the last column of the csv file.
HOT-KEYs Please refer to Section 4.2 Hot-keys support.
  • eeprom command
Options Descriptions
[-board=] It must be provided when use [-w] to write an empty eeprom. Because BCU cannot recognize the board automatically when eeprom is empty.
[-w] Write a default value to eeprom.
MUST provide [-board=]!
[-brev=] [-srev=] [-sn=] is optional.
[-r] Read eeprom value and print all info.
[-erase] Empty an eeprom on the board.
[-brev=] Use with [-w]. Change the default Board Revision in the default templet. Example: -brev=A0
[-srev=] Use with [-w]. Change the default SoC Revision in the default templet. Example: -srev=A0
[-sn=] Use with [-w]. Change the default BOARD SN in the default templet. Example: -sn=123
[-wsn=] Use without [-w]. Change the default BOARD SN in the default templet. Example: bcu eeprom -wsn=123
  • get_level command
Options Descriptions
[GPIO_NAME] Specify a GPIO pin to get its level. List of available GPIO can be found using lsgpio command
  • set_gpio command
Options Descriptions
[-delay=DURATION] Set after DURATION ms
[-hold=DURATION] Hold the output state for DURATION ms
[GPIO_NAME] Specify which GPIO pin should be set, list of available GPIO can be found using lsgpio command
[0] Set the pin output low
[1] Set the pin output high
  • set_boot_mode command
Options Descriptions
[BOOTMODE_NAME] Booting from emmc device
[-boothex=]
[-bootbin=]
Please refer to Section 2.3.
  • upgrade command
Options Descriptions
[-doc] Download pdf version of release note.
[-pre] Download pre-released BCU.

2.5 EEPROM & Multi-boards usage

NOTE: 8MPLUSLPD4-CPU board does NOT support EEPROM.

Table: Board Configuration Data shows all the useful information about the board stored in the EEPROM (just using imx8mpevkpwra0 as an example).

When using the board for the first time, the user may need to manually write information about the board once. Otherwise, the automatic identification function of BCU and PMT will not be used.

Table : Board Configuration Data

Information Address of EEPROM Data(example) Comments
BOARD_ID 0x1A NXP i.MX8MP EVK PWR Board These two information are very important.
User must ensure they are set properly in the PMT Excel file.
In BCU, please provide the correct [-brev=] value in the command if you don’t use the default revision value.
BOARD_REV 0x1C A0
SOC_ID 0x1D i.MX8MP This is related to the [-board=] option and cannot be changed manually in BCU.
SOC_REV 0x1E A2 In BCU, please provide the correct [-srev=] value in the command if you don’t use the default revision value.
PMIC_ID 0x1F PCA9450CHN These are related to the [-board=] option and cannot be changed manually in BCU.
PMIC_REV 0x20 N/A
NBR_PWR_RAILS 0x21 27
BOARD_SN 0x22 24 (example) Board specific Serial Number, user defined (Range: 1~65535)

2.5.1 The EEPROM checking sequence

All boards supports EEPROM will be check content in EEPROM when use commands which need board information.

These boards will not be checked EEPROM content.

  • imx8dxl_ddr3_evk
  • imx8mpevk
  • imx8mpddr3l
  • imx8mpddr4

These commands will not check EEPROM content.

  • eeprom
  • lsbootmode
  • lsgpio
  • lsftdi
  • lsboard
  • upgrade
  • uuu
  • version
  • help

If the used board and command are not listed above, the BCU will automatically read the content in EEPROM. In the following situations, an error will be reported.

  1. If the EEPROM content is empty, BCU will make a warning.

eeprom_warn

  1. If the board revision in EEPROM does not match with the board information user provided, BCU will stop.

eeprom_mismatch

2.5.2 Flash board configuration into EEPROM

All EEPEOMs on the boards should be programmed before sending to users. If it is not programmed, please use this command to program the EEPROM.

$ ./bcu eeprom -w -board=imx8mpevkpwra0 -brev=A0 -srev=A2 -sn=123

NOTE:
If you are using the Windows version of BCU, please unplug and re-plug the serial cable after flashing the EEPROM when you can see the 93LC56/66 chip connected to FT4232 on the board.
Otherwise, Windows will not be able to correctly recognize and open the FTDI chip after the serial number has been changed.

Option [-board=] is used to set the BOARD_ID parameter. It must be set to “imx8mpevkpwra0” for the 8MPLUSLPD4-PWR board (mandatory).

If use the [-brev=] option(Range: A0~A9, B0~B9,…, N0~N9, O0~O9), the revision information of the Board will be modified. If this option is not used, the default Board revision will be used. Please use capital letters.

If use the [-srev=] option(Range: A0~A9, B0~B9,…, N0~N9, O0~O9), the revision information of the SoC will be modified. If this option is not used, the default SoC revision will be used. Please use capital letters.

If use the [-sn=] option(Range: 1~65535), the Board Serial Number will be modified. If this option is not used, it will be set to 1.

If the options [-brev=] [-srev=] and [-sn=] are all not used, the EEPROM will be programmed with the default values.

eeprom_write

2.5.3 Read EEPROM content

If the eeprom on the board has been flashed, please use this command to read manually.

$ sudo ./bcu eeprom -r

eeprom_read

2.5.4 Find the board on the host automatically by reading EEPROM

If the eeprom has been programmed by BCU or PMT, then, BCU can recognize it by reading its eeprom by using option [-auto].

If there are more than one boards plugged in your host, you can use [-id=] or [-board=] to operate the specific board.

In short, if the provided [-board=] or [-id=] information can uniquely locate a board, the BCU can directly use this command to find the corresponding board and operate it.

NOTE: If other boards are also connected to the same host, [-auto] may break theirs ttyUSB connection.

2.5.5 How to get the value of [-id=]

There are two methods to get the board id.

  • Method 1:
    Using this command with option -auto:
    $ sudo ./bcu lsftdi -auto
    This method has three limitations:

     1. The board must support EEPROM
     2. The EEPROM on the board that you want to use must be programmed.
     3. If other boards are also connected to the same host, [-auto] may break theirs ttyUSB connection.
    

    If meet the limitations, Method 2 can be used.

  • Method 2:
    Get the id number:

     $ sudo ./bcu lsftdi
     Get the board id here:
     board\[0\] location_id=1-1  
    

    If want to reset id=1-1 board $ sudo ./bcu reset [BOOTMODE_NAME] [-board=imx8mpevk] -id=1-1

2.6 Power measurement and dump in the background on Linux host

Some tests need run BCU monitor and dump functions in the background. Please follow this steps to do the background test.

  1. Please download the latest BCU ( at least 1.0.246 ).

  2. Use this command to trigger the BCU power dump: $ sudo ./bcu monitor -board=xxx -id=yyy -dump=zzz -nodisplay> /dev/null&

  3. Use this command to terminate the BCU in the background: $ sudo kill -2 BCU_PID

2.7 OpenOCD remote debug usage

For now, we have two platforms support OpenOCD: imx8mp and imx8dxl.

Take imx8mp as an example to illustrate the use of OpenOCD.

  1. Install openocd.

You can get the latest binary packages or source code from here: http://openocd.org/getting-openocd/

Or you can build and install openocd from Github repo on Linux method:

     $ git clone <https://github.com/ntfreak/openocd.git>
     $ cd openocd
     $ ./bootstrap
     $ ./configure --enable-openjtag_ftdi
     $ make && sudo make install
  1. Get the config files of imx8mp
  2. Plug-in the UART debug cable
  3. Run bcu reset command to enable the JTAG Remote Control function
    • $ sudo bcu reset emmc/sd/… -board=imx8mpevk
  4. Run openocd service
    • $ openocd -f tcl/interface/ftdi/imx8mp-evk.cfg -f tcl/board/imx8mp-evk.cfg
  5. Start telnet or gdb to debug
    • $ telnet 127.0.0.1 4444

3 Supported Platforms

BCU supports these boards now.

[-board=]string Board/Platform
imx8mpevk 8MPLUS-BB with 8MPLUSLPD4-CPU board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • JTAG works with OpenOCD
Not supported:
  • Power measurement;
  • Auto detect board;
  • I2C EEPROM
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>-board=imx8mpevk [-id=]
imx8mpevkpwra0/imx8mpevkpwra1 8MPLUS-BB with 8MPLUSLPD4-PWR board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
  • Auto detect board;
  • I2C EEPROM
  • JTAG works with OpenOCD
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx8mpevkpwra1] [-id=]
imx8mpddr4 i.MX8MPDDR4 VDB.
Supported:
  • Power measurement;
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu monitor -board=imx8mpddr4<br>[-id=]
imx8dxlevk/imx8dxlevkc1 imx8dxlevk with lpddr4 board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
  • Auto detect board;
  • I2C EEPROM
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx8dxlevk] [-id=]
imx8dxl_ddr3_evk imx8dxlevk with ddr3 board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
Not supported:
  • Auto detect board;
  • I2C EEPROM
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>-board=imx8dxl_ddr3_evk [-id=]
imx8dxl_obx imx8dxl_obx board:
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI EEPROM
Not supported:
  • Auto detect board;
  • Power measurement;
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]
-board=imx8dxl_ddr3_evk [-id=]
imx8ulpevk/imx8ulpevkb2/imx8ulpevk9 imx8ulpevk board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
  • Auto detect board;
  • FTDI EEPROM
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]
[-board=imx8ulpevk] [-id=]
imx8ulpwatchval imx8ulpwatchval board.
Supported:
  • Power measurement;
  • Auto detect board;
  • FTDI EEPROM
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu monitor<br>[-board=imx8ulpevkwatchval] [-id=] [-hz=]
imx8ulpwatchuwb imx8ulpwatchuwb board.
Supported:
  • Power measurement;
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu monitor<br>[-board=imx8ulpwatchuwb] [-id=] [-hz=]
val_board_1 val_board_1 board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
  • Auto detect board;
  • FTDI EEPROM
  • Temperature sensor
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=val_board_1] [-id=]
val_board_2 val_board_2 board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
  • Auto detect board;
  • FTDI EEPROM
  • Temperature sensor
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=val_board_2] [-id=]
val_board_3 val_board_3 board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
  • Auto detect board;
  • FTDI EEPROM
  • Temperature sensor
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=val_board_3] [-id=]
imx93evk11/imx93evk11b1 i.MX93 11x11 EVK board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
  • Auto detect board;
  • FTDI EEPROM
  • Temperature sensor
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx93evk11b1] [-id=]
imx93evk14 i.MX93 14x14 EVK board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
  • Auto detect board;
  • FTDI EEPROM
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx93evk14] [-id=]
imx93qsb i.MX93 QSB board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx93qsb] [-id=]
imx95evk19 i.MX95 19x19 EVK board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • FTDI GPIO set;
  • Power measurement;
  • Auto detect board;
  • FTDI EEPROM
  • Temperature sensor
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx95evk19] [-id=]
imx943evk19a0/imx943evk19b1 i.MX943 19x19 EVK board.
Supported:
  • Board reset to the boot_mode;
  • ON/OFF set;
  • Power measurement;
  • Auto detect board;
  • FTDI EEPROM
  • Temperature sensor
Typical BCU command usage, arguments in [] is optional:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx943evk19b1] [-id=]

3.1 i.MX8MP-EVK

Supported BOOTMODE_NAME:

SW4[1/2/3/4] BOOTMODE_NAME Boot mode
0000 fuse Internal Fuses
0001 usb USB Serial Download
0010 emmc EMMC/USDHC3
0011 sd USDHC2
0100 nand_256 NAND 8-bit single device 256 page
0101 nand_512 NAND 8-bit single device 512 page
0110 qspi_3b_read QSPI 3B Read
0111 qspi_hyperflash QSPI Hyperflash 3.3V
1000 ecspi ecSPI Boot
1110 infinite_loop Infinite Loop Mode

For i.MX8MP-EVK, we have two different CPU board for this base board.

CPU board 8MPLUSLPD4-CPU does NOT support monitor and eeprom.

CPU board 8MPLUSLPD4-PWR support monitor and eeprom.

From version bcu_1.0.128, named imx8mpevk and imx8mpevkpwr respectively.

NOTE:
From version bcu_1.0.128, BCU supports the auto detect board function. If you want to use monitor function on i.MX8MP-EVK, please use these two CMDs:

$ sudo ./bcu monitor [-id=] [-dump] [-hz=]

Or: $ sudo ./bcu monitor -board=imx8mpevkpwra1 [-id=] [-dump] [-hz=]

Please DO NOT use $ sudo ./bcu monitor -board=imx8mpevk anymore.

3.2 i.MX8DXL-EVK

Supported BOOTMODE_NAME:

SW1[1/2/3/4] BOOTMODE_NAME Boot mode
0000 fuse Internal Fuses
1000 usb USB Serial Download
0100 emmc EMMC
1100 sd USDHC1 SD
0010 nand NAND 128 page
1010 m4_infinite_loop DFT BOOT MODE : M4 infinite loop
0110 spi Flex SPI read 3b support
1110 dft_burnin_mode DFT BURNIN MODE

3.3 i.MX8ULP-EVK series

Support i.MX8ULP-EVK, i.MX8ULP-EVK-B2(Base Board revision), i.MX8ULP-EVK9, i.MX8ULP-WATCH-VAL.

i.MX8ULP-EVK supports 5 boot mode in BCU for now. If more modes are needed, please create an issue in this GitHub or add the command you need in imx8ulpevk_board_boot_modes[] board.c.

BOOTMODE_NAME for imx8ulpevk/ imx8ulpevkb2:

SW1[8/7/6/5/4/3/2/1] BOOTMODE_NAME Boot mode
00 00 00 00 fuse Internal Fuses
01 00 00 00 usb USB Serial Download
10 00 00 00 emmc_s A35:EMMC+No M33+No LP
10 00 00 10 emmc_nor A35:EMMC+M33:QSPI-NOR+No LP
10 00 00 11 NOT SUPPORT A35:EMMC+M33:QSPI-NOR+LP
10 00 01 10 NOT SUPPORT A35:EMMC+M33:QSPI-Nand+No LP
10 00 01 11 NOT SUPPORT A35:EMMC+M33:QSPI-Nand+LP
10 01 00 00 NOT SUPPORT A35:SPI-Nand+No M33+No LP
10 01 00 10 nand_nor A35:SPI-Nand+M33:QSPI-NOR+No LP
10 01 00 11 NOT SUPPORT A35:SPI-Nand+M33:QSPI-NOR+LP
10 01 01 10 NOT SUPPORT A35:SPI-Nand+M33:QSPI-Nand+No LP
10 01 01 11 NOT SUPPORT A35:SPI-Nand+M33:QSPI-Nand+LP
10 10 00 00 nor_s A35:SPI-NOR+No M33+No LP
10 10 00 10 nor_nor A35:SPI-NOR+M33:QSPI-NOR+No LP
10 10 00 11 NOT SUPPORT A35:SPI-NOR+M33:QSPI-NOR+LP
10 10 01 10 NOT SUPPORT A35:SPI-NOR+M33:QSPI-Nand+No LP
10 10 01 11 NOT SUPPORT A35:SPI-NOR+M33:QSPI-Nand+LP

3.4 val_board_1

val_board_1 supports 3 boot mode in BCU.

BOOTMODE_NAME for val_board_1:

BOOTMODE_NAME Boot mode
usb USB Serial Download
emmc Boot from EMMC
sd Boot from SD

3.5 val_board_2

val_board_2 supports 11 boot mode in BCU.

BOOTMODE_NAME for val_board_2:

SW1[1/2/3/4] BOOTMODE_NAME Boot mode
0000 fuse Internal Fuses
1000 usb USB Serial Download
0100 emmc USDHC3(eMMC boot only, SD3 8-bit)
1100 sd USDHC2(SD boot only, SD2)
0010 nand_256 NAND 8-bit single device 256 page
1010 nand_512 NAND 8-bit single device 512 page
0110 qspi_3b QSPI 3B Read
1110 qspi_hyper QSPI Hyperflash 3.3V
0001 ecspi ecSPI Boot
0111 loop Infinite Loop Mode
1111 test Test Mode

3.6 i.MX93 series

Support i.MX93-11x11-EVK(A/B1), i.MX93-QSB, i.MX93-14x14-EVK.

Imx93 supports 11 boot mode in BCU.

BOOTMODE_NAME for all imx93 boards:

BOOTMODE_NAME Boot mode
fuse Internal Fuses
usb USB Serial Download
emmc USDHC1 8-bit eMMC 5.1
sd USDHC2 4-bit SD3.0
nor FlexSPI Serial NOR
nand_2k FlexSPI Serial NAND 2K page
infinite_loop
test_mode
m_fuse Internal Fuses
m_usb USB Serial Download
m_emmc USDHC1 8-bit eMMC 5.1
m_sd USDHC2 4-bit SD3.0
m_nor FlexSPI Serial NOR
m_nand_2k FlexSPI Serial NAND 2K page
m_infinite_loop
m_test_mode

3.7 i.MX95 series

Support i.MX95-19x19-EVK(A) and i.MX95-15x15-EVK(A).

i.MX95 supports 12 boot modes in BCU. We usually use CORTEX-M boot.

BOOTMODE_NAME for i.MX95 boards:

BOOTMODE_NAME Boot mode
a_usb USB Serial Download(Single boot)
a_emmc USDHC1 8-bit eMMC 5.1
a_sd USDHC2 4-bit SD3.0
a_nor FlexSPI Serial NOR
a_nand_2k FlexSPI Serial NAND 2K page
a_nand_4k FlexSPI Serial NAND 4K page
usb USB Serial Download (CORTEX-M boot)
emmc USDHC1 8-bit eMMC 5.1
sd USDHC2 4-bit SD3.0
nor FlexSPI Serial NOR
nand_2k FlexSPI Serial NAND 2K page
nand_4k FlexSPI Serial NAND 4K page

3.7.1 i.MX95 M7 UART console usage

iMX95_jtag_issue

If this GPIO switch is connected to SxA by default, it will cause a continuous leakage current on the TDI and TMS pins.

To address this issue, we have now configured this GPIO switch to default to SxB during reset/init command. When M7 UART functionality is needed, BCU can be used to set FTA_SEL to enable UART functionality.

$ sudo ./bcu reset emmc -board=imx95evk19 -id=1-6; sudo ./bcu set_gpio ft_fta_sel 0 -board=imx95evk19 -id=1-6

3.8 i.MX91 series

Support i.MX91-11x11-EVK(A) and i.MX91-9x9-QSB(A).

i.MX91 supports 11 boot modes in BCU.

BOOTMODE_NAME for all imx91 boards:

BOOTMODE_NAME Boot mode
fuse Internal Fuses
usb USB Serial Download
emmc USDHC1 8-bit eMMC 5.1
sd USDHC2 4-bit SD3.0
nor FlexSPI Serial NOR
nand_2k FlexSPI Serial NAND 2K page
infinite_loop
test_mode
m_fuse Internal Fuses
m_usb USB Serial Download
m_emmc USDHC1 8-bit eMMC 5.1
m_sd USDHC2 4-bit SD3.0
m_nor FlexSPI Serial NOR
m_nand_2k FlexSPI Serial NAND 2K page
m_infinite_loop
m_test_mode

3.9 i.MX943 series

Support i.MX943-19x19-EVK(A0) and (B1).

i.MX943 supports 6 boot modes in BCU.

NOTE:
For the i.MX943-19x19-EVK(A0) board, the BCU can function properly only when the first pin of the SW7 DIP switch is set to ON.
For the i.MX943-19x19-EVK(B1) board, the BCU can work normally only after setting the SW7 DIP switch to 00xx ([0:3]).

BOOTMODE_NAME for i.MX943 boards:

BOOTMODE_NAME Boot mode
fuse Internal fuse
usb USB Serial Download
emmc USDHC1 8-bit eMMC 5.1
sd USDHC2 4-bit SD3.0
nor Serial NOR
nand XSPI Serial NAND

4 Monitor Usage

Command to use the power measurement function:

$ sudo ./bcu monitor -board=imx8dxlevk

When measuring power, you can use the [-dump=xxx] option to output data to a "xxx.csv" file with a specified file name at the same time.

More options please check “monitor command” in Section 2.3.

4.1 Modify the measurement range

Press the letter on keyboard to control corresponding extra sense resistor which can modify the measurement range if the rail support this function.

For example, on i.MX8DXL-EVK:

iMX8DXLEVK_rail

“vdd_snvs_4p2” only has one measurement range [0~50mA] which is corresponded to one sense resistor [rsense1: 2000 milliohm]. It cannot change the measurement range.

“vdd_main” has two sense resistors [rsense1: 60 milliohm, rsense2: 10000 milliohm]. So it has two measurement ranges [01666.7mA and 010.0mA]. You can press “H” on the keyboard to change the max measurement range when BCU monitor function is running. The selected range is marked with “*”.

NOTE:

If the resistance value of the sensing resistor is changed/reworked, please modify the corresponding resistance value in the configuration file(config.yaml) . For the specific modification method, please refer to Section 4.5

4.2 Hot-keys support

Press 1 on keyboard to reset all Avg value.

Press 2 on keyboard to reset all MaxMin value.

Press 3 on keyboard to reset all Avg and MaxMin values.

Press 4 on keyboard to switch the unit of Current as the order of mA/Auto/uA.

Press 5 on keyboard to reset board. BCU will ask you which boot mode will be used after reset. After reset the board, all sense resistors will be chosen to the default to ensure the board boot normally. After reset the board, Avg/Max/Min will be reset, too.

Press 6 on keyboard to resume board which just simulate pressing the ON/OFF button once shortly. After reset the board, Avg/Max/Min will NOT be reset and will NOT switch sense resistor for now.

4.3 Data display refresh rate

BCU monitor function will show real-time data by default which means that the data displayed on the terminal is refreshed every time a sample is taken.

However, refreshing the display too fast will cause us to be unable to see clearly what is displayed, and at the same time will cause a serious drop in the sampling rate on the Windows version.

So, we can use monitor command with option [-hz=] to set the display refresh times in one second. Support float number.

  • Windows: > .\bcu.exe monitor [-board=xxx] -hz=”0.5”
  • Linux: $ sudo ./bcu monitor [-board=xxx] -hz=0.5

Limiting the display refresh rate will not limit the data sampling rate. BCU will always sample power data at the fastest speed it can reach. The values after each display refresh contains all the sampling data before that.

Restricting the display refresh rate will increase the sampling rate under the current single-thread architecture on Windows version. Because under Windows, refreshing the display once in the terminal will take a long time.

The max refresh speed is limited by computer performance(sampling rate), system version and [-hz=]. The real time refresh Hz will show at the bottom of the TUI window.

Real display Hz: 1.0

Currently, the CMD used to achieve the maximum sampling speed on Windows is:

> .\\bcu.exe monitor -board=imx8dxlevk -hz=”0.5”

The smaller the value of [-hz=]is, the faster the sampling speed can reach.

Because of different terminal implementations, the high display refresh rate under Linux will not affect the sampling rate.

4.4 Dump data to .csv file

Use the CMD with option [-dump] or [-dump=filename.csv]

The speed of dumping data is related to computer performance, system version and real-time data display.

Using [-nodisplay] option will select [-dump] by default, and it will not display the real-time data. Just dump the data to .csv file with the maximum speed.

For now, the CMD used to achieve the maximum dumping speed on Windows is:

> .\bcu.exe monitor -board=imx8dxlevk -dump -nodisplay -hz=”0.5”

Because of different terminal implementations, the high display refresh rate under Linux will not affect the sampling rate.

4.5 Yaml config file usage

Yaml config file will be created automatically when the first time you use BCU. It will be called as “config.yaml” in the same folder of bcu.exe/bcu.

NOTE:

Every time after updating the new version of BCU, please delete the original config.yaml and then run BCU.

The config file looks like:

config_version: bcu_1.0.191-0-g7cee143
#  show_id can set the display order of the rails.
#  show_id should start from 1.
#  If show_id: 0, it means that this rail will not be displayed and dumped.
#
#  Please DO NOT delete any line of a power rail!
#  If you don't want to show it, please just set its "show_id" as 0.
#
#  Unit of rsense1 and rsense2 is Milliohm.
#
#  Can add, modify or delete groups for each platform with power measurement.
#  Up to 10 groups can be added to each platform.
#  Please follow the existing examples to add groups.

boardname: imx8dxlevk
mappings:
   - on_board_5v0        : { rsense1: 10      , rsense2: 10      , show_id: 1   }
   - vdd_usb_3v3         : { rsense1: 1650    , rsense2: 1650    , show_id: 2   }
   - 3v3_io              : { rsense1: 1650    , rsense2: 1650    , show_id: 3   }
   - 3v3_enet            : { rsense1: 3300    , rsense2: 3300    , show_id: 4   }
   - 3v3_pmic_in         : { rsense1: 10      , rsense2: 10      , show_id: 5   }
   - on_board_3v3        : { rsense1: 10      , rsense2: 10      , show_id: 6   }
   - vdd_snvs_4p2        : { rsense1: 2000    , rsense2: 2000    , show_id: 7   }
   - vdd_main            : { rsense1: 64      , rsense2: 10000   , show_id: 8   } #Range: rsense1=>1562.5mA, rsense2=>10.0mA
   - vdd_memc            : { rsense1: 54      , rsense2: 10000   , show_id: 9   } #Range: rsense1=>1851.9mA, rsense2=>10.0mA
   - vdd_ddr_vddq        : { rsense1: 124     , rsense2: 10000   , show_id: 10  } #Range: rsense1=>806.5mA, rsense2=>10.0mA
   - ddr_vdd2            : { rsense1: 10      , rsense2: 10      , show_id: 11  }
   - vdd_enet0_1p8_3p3   : { rsense1: 3320    , rsense2: 3320    , show_id: 12  }
   - vdd_ana             : { rsense1: 4       , rsense2: 10000   , show_id: 13  } #Range: rsense1=>25000.0mA,rsense2=>10.0mA
......
   - emmc0               : { rsense1: 3000    , rsense2: 3000    , show_id: 23  }
   - on_board_12v0       : { rsense1: 10      , rsense2: 10      , show_id: 24  }
groups: #Please do NOT delete this line.
   - GROUP_SOC           : "vdd_main,vdd_usb_3v3,3v3_enet,vdd_snvs_4p2,vdd_memc"
   - GROUP_SOC_FULL      : "vdd_main,vdd_usb_3v3,3v3_enet,vdd_snvs_4p2,vdd_memc,3v3_io,vdd_enet0_1p8_3p3,1v8_2,1v8_3"
   - GROUP_DRAM          : "ddr_vdd1,ddr_vdd2"
   - GROUP_PLATFORM      : "on_board_12v0"
......

If the modified config file will cause BCU to execute error, please delete “config.yaml” file and re-config it after re-running the BCU.

4.5.1 Re-config values of sensing resistances

You can re-config the values of sensing resistances in the config file, if the resistance value of the sensing resistor is changed/reworked.

Unit of rsense1 and rsense2 is Milliohm.

For a power measurement rail with only one range, please set the resistance value you used to rsense1 and rsense2 at the same time. Just like this.

- on_board_5v0 : { rsense1: 10 , rsense2: 10 , show_id: 1 }

If a power measurement rail has two ranges, please pay attention to the way of resistance configuration.

For example on i.MX8MPEVK-PWR:

iMX8MPEVK_PWR Fig. 1 Range switching circuit on i.MX8MPEVK-PWR

The configuration of the rail in the Fig. 1 in the config.yaml:

nvcc_snvs_1v8 : { rsense1: 10000 , rsense2: 509000 , show_id: 10 }

At present, the circuit design of all rails with range switching function is similar to Fig. 1.

When NCP45541 is enabled, R78 can be regarded as being shorted. At this time, the value of sense resistor is 10 ohms of R83. This corresponds to the range with the large measurement range. So set the rsense1 in the config.yaml as 10000 milliohm.

When NCP45541 is disabled, the value of sense resistors is 509 ohms of R78+R83. This corresponds to the range with the small measurement range. So set the rsense2 in the config.yaml as 509000 milliohm.

You can change the space of the rsense value or not. In addition, please DO NOT modify any spaces of the config file.

4.5.2 Make the range fixed to make BCU read faster

Now, we can switch sense resistors when BCU runs with the max reading speed. So drop this function. The related settings in config.yaml will be ignored.

If you want to switch current range by pressing the corresponding key when BCU runs, BCU need read the gpio’s status named “SR_” every time it read power values. It will cost a lot of time to re-config io expander on the i2c bus.

~~If you set “israngefixed” as true, you cannot switch current range when BCU runs, but it makes BCU reading faster(~30% speed faster than setting it as false). You can still switch current range manually by changing “extra_sr” in the config.yaml. The max range it can reach is shown after the “#” in the same line.~~

If you set “israngefixed” as false, “extra_sr” will be ignored. And you can switch current range when BCU runs by pressing the corresponding key.(Please pay attention about the letter case) However, the BCU read speed will be slower.

4.5.3 Re-config the display order of the rails

The values of “show_id” can set the display order of the rails.

If set show_id as 0, then this rail will not be display in the TUI and will not be dumped in the .csv file. If all four rails on one PAC1934 are disabled by setting show_id as 0, the PAC1934 will not be read when sample power data which means will increase the sample speed.

4.5.4 Re-config the group settings

  • Supports displaying/setting up to 10 groups.
  • Supports the addition and deletion of groups.

Please follow the format of existing groups to add the groups you need.

mappings:
   - on_board_5v0        : { rsense1: 10      , rsense2: 10      , show_id: 1   }
   - vdd_usb_3v3         : { rsense1: 1650    , rsense2: 1650    , show_id: 2   }
......
groups: #Please do NOT delete this line.
   - GROUP_SOC           : "vdd_main,vdd_usb_3v3,3v3_enet,vdd_snvs_4p2,vdd_memc"
   - GROUP_SOC_FULL      : "vdd_main,vdd_usb_3v3,3v3_enet,vdd_snvs_4p2,vdd_memc,3v3_io,vdd_enet0_1p8_3p3,1v8_2,1v8_3"
   - GROUP_DRAM          : "ddr_vdd1,ddr_vdd2"
   - GROUP_PLATFORM      : "on_board_12v0"
   - MY_GROUP_xxx       : "rail_name_from_mappings1,rail_name_from_mappings2"

4.5.5 Version information check

In order to ensure that the config.yaml file corresponds to the BCU application version, a configuration file version check is added.

When there are no major changes to the configuration file between versions, BCU will automatically update the version information of the configuration file.

If the new version of the BCU has major changes to the configuration file, the user will be reminded to delete the old version of the configuration file.

4.6 Some other options

Please refer to Section 2.4 for some statistics and sampling setting options.

4.6.1 Server function

This function will set up a TCP server to respond to the requests from clients connected to 0.0.0.0:65432.

In this function:

  • The TUI will not show the collected data.
  • Currently supports only one client to connect to the server at the same time.
  • After the client disconnects, it will continue to monitor the port until the client sends a quit request.
  • The dump data function is not supported.

Supported requests:

  • data request
    • Will return the average power of all rails between the last request and current request.
    • Return format: “iso8601_time;rail_name_1:rail_power_avg_1; rail_name_2:rail_power_avg_2; rail_name_3:rail_power_avg_3;…… rail_name_n:rail_power_avg_n;”
  • quit
    • Before sending this command, if the client disconnects, the BCU will not exit. It will continue to monitor the port 65432.
    • After receiving this command, the BCU will exit the server function and will not continue to monitor the port.

5 Build Steps

5.1 Windows Version

  1. download Visual Studio 2017 or latest community version (free)
  2. > git clone https://github.com/NXPmicro/bcu.git
  3. > git submodule update --init
  4. open Board_Control_Utilities.sln by VS
  5. select the build type as "Release"
  6. click build button

5.2 Linux Version

Ubuntu 16.04 does not support to build bcu since version bcu_1.1.25. Please use Ubuntu 18.04 and above system to build Linux version.

$ sudo apt-get update
$ sudo apt-get install libftdi1-dev libyaml-dev openssl pkgconf libncurses5-dev libssl-dev libconfuse-dev
$ git clone <https://github.com/NXPmicro/bcu.git>
$ cd bcu/
$ git submodule update --init
$ cmake .
$ make

5.3 MacOS Sonoma 14.x Version(x64 version)

  1. install Homebrew to /usr/local/bin:

     $ /bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"
    
  2. install the following package with homebrew to /usr/local/Cellar:

     $ brew install pkgconfig libftdi libyaml
    
  3.  $ cd bcu/
    
  4.  $ git submodule update --init
    
  5.  $ cmake .
    
  6.  $ make
    

5.4 MacOS Sonoma 14.x Version(arm64 version)

1. Start a x86 mode shell:

    $ arch -x86_64 $SHELL

2. Then all operations should be run under this x86 shell.

3. Steps are same with MacOS Big Sur 11.x Version(x64 version)

6 Release Notes

Bcu_1.1.118

  • correct the gpio name for imx943evk19a0 and imx943evk19b1

Bcu_1.1.117

  • fix eeprom content of imx943evk19b1

Bcu_1.1.115

The “onoff” and "reset" commands of this version behave differently from the previous official version. Please pay attention to NOTE in List of available commands & their functions

New fetures:

  • Add i.MX943 19x19 EVK proto1(imx943evk19a0) and proto2(imx943evk19b1) support
  • All BCU settings will be cleared by default after running “onoff” and "reset" commands. Can use [-keep] option to keep the BCU setting after BCU exits.

Fixes:

  • pcal6524: Fix the issue where the pad is set to output when reading the input level

Bcu_1.1.100

Bcu_1.1.92

New feature

  • Add imx8ulpwatchuwb board support

Fix

  • Fix group power shows issue when use uW unit
  • Fix onoff disables remote control issue
  • Fix the reset time when using -hold= in reset command
  • Change the reset time to 9s for imx91 qsb board

Bcu_1.1.89

Fix

  • Fix imx91 11x11 evk bootmode list issue

Bcu_1.1.88

New Feature

  • Add Ubuntu 22 support
  • Add i.MX93 14x14 EVK board support

Fixes

  • Fix imx95evk15 power group setting issue
  • Fix buffer overflow issue
  • Fix -auto function on Linux
  • Fix 95 get_boot_mode issue
  • Fix imx91/93/95 board reset issue

Bcu_1.1.79

New Feature

  • Add i.MX95 15x15 EVK board support
  • Add i.MX91 11x11 EVK board support
  • Add i.MX91 QSB board support

Bcu_1.1.75

New Feature

  • Add i.MX95 19x19 EVK board support
  • Show Serial Number when use lsftdi command

Bcu_1.1.68

Bug Fix

  • Remove the unsupported gpio pins on imx93qsb.

Bcu_1.1.67

New Feature

  • Add imx93 qsb board support
  • Add imx93evk11b1 support
  • Add 8dxl orangebox support
  • Add val_board_3 support

Bug Fix

  • fix incorrect device list when open port with putty on Windows
  • fix segment fault issue when reset board in monitor
  • fix reset failed issue when do not provide boot mode option in reset command
  • fix rail name incomplete display when show uA/uW data

Bcu_1.1.52

New Feature

  • Add imx93 11x11 evk board support

Bcu_1.1.47

New Feature

  • Add imx8ulp watch val board support

Bcu_1.1.45

New Feature

  • Add imx8ulp-evkb2 board support

Bcu_1.1.38

Bug Fix

  • Fix imx8dxlevk’s segfault.

Bcu_1.1.37

New Features

  • Add imx8ulp-evk9 board support

Bug Fix

  • keep FTDI bus B open when exiting BCU, if no UART uses it.

Bcu_1.1.36

New Features

  • Add temperature sensor support
  • Add temperature sensor support in monitor function

Bug Fix

  • Fix some display issues

Bcu_1.1.35

New Features

  • Support server function
  • Support option -pre to download pre-released bcu

Bcu_1.1.30

New Features

  • Support val_board_2

Bcu_1.1.29

New Features

  • improve the sampling rate
  • remove imx8mpddr3l board

Bcu_1.1.28

New Features

  • Add an install hook to create udev rules file in snap packet
  • Add reset waiting times for imx8ulpevk
  • Remove the letter before the line if this rail does not support SR
  • Fix the reset issue in monitor
  • Add support for DXL EVK C1

Bug Fix

  • Fix 8ulp's power rail number
  • Fix imx8ulp cannot reset issue

Bcu_1.1.26

New Features

  • add conf_path or -cp to print config file path
  • add imx8ulp-evk eeprom support by referring driver's guide
  • Fix the path of bcu_config.yaml to user folder

Bug Fix

  • clean cache for mac when getchar()
  • clean cache for mac when getchar()

Bcu_1.1.25

This version has no new feature.

In order to ensure the normal release of BCU, we reviewed the license and made the following changes in this version.

  • Remove ftd2xx.h file.

  • Remove libftdi static include, because its license is LGPL.

  • The version of libftdi installed using apt-get in Ubuntu16 is too low to support eeprom reading and writing. Therefore, in the previous version of BCU, in order to be compatible with both Ubuntu16 and 18, BCU statically linked libftdi.)

The following features are affected:

  • The Windows version of BCU does not support imx8ulpevk's EEPROM read and write.

  • Imx8mpevkpwr's eeprom function is not affected, because its eeprom is located on the FTDI I2C bus, rather than directly connected to the FTDI chip (such as imx8ulpevk).

  • This feature will be added back in next version by using open source libraries.

  • Ubuntu1618 binary file is no longer provided. Just provide Ubuntu18 binary file.

  • All Linux users, include Ubuntu16 users, can install BCU through Snap.

  • $ sudo snap install --devmode bcu-nxp; sudo snap alias bcu-nxp bcu

Bcu_1.1.24

New Features

  • Linux version can be installed from Snap Store by using command:
    • $ sudo snap install bcu-nxp

Bug Fix

  • fix upgrade extension name issue
  • remove the comma at the end of every line of csv file

Bcu_1.1.18

New Features

  • Generate executable files separately for Ubuntu20

Bug Fix

  • fix 8ulp-evk pmic name
  • fix buffer overflow with long dump file names
  • fix tag name

Bcu_1.1.7

New Features

  • Support imx8ulp-evk board
  • Improve get_boot_mode print context
  • Add -boothex= and -bootbin= to support setting more boot mode

Bcu_1.1.1

New Features

  • Support Mac OS 11.x Big Sur, x64/arm64

Bug Fix

  • improve yaml config file version update function (Need to manually delete config.yaml)

Bcu_1.0.253

New Features

  • add -force to force change -avg to -stats to dump all avg/max/min values in dump file
  • add board model correction

Bug Fix

  • update 8ulpevk's mapping table
  • fix dump name missing when -dump= is before -nodisplay

Bcu_1.0.246

New Features

  • add imx8ulpevk board support (just for base board test)
  • add imx8mpevkpwra1 support
  • Please use -board=imx8mpevkpwra0/imx8mpevkpwra1 to choose which version of board to use.
  • add eeprom check when use reset/monitor functions
  • improve lsftdi function, can use -auto to find board's id number

Bug Fix

  • fix reset function failed warning
  • use the value in eeprom to verify the -board= provided
  • disable getchar() when use nodisplay, to let it run in background

Bcu_1.0.237

New Features

  • add dump_avg when dump data to csv file in monitor function
  • disable auto find board function in default
  • Auto find board function will connect every boards pulgged in the host. This may cause the tty of the other board disconnect from the host. So disable this function by default. Can enable it by using option [-auto].
  • Bug Fix
  • fix warning: ‘ftdi_usb_purge_tx_buffer’ is deprecated

Bcu_1.0.230

New Features

  • add download status for both versions in command upgrade
  • add -pmt option to dump csv files which can be imported to PMT
  • add FTDI and AT24Cxx EEPROM support for Linux and Windows version
  • support auto recognize board by reading eeprom data
  • link libftdi static library because libftdi1 in 16.04 do not support reading/programing user area in FTID EEPROM

Bcu_1.0.220

New Features

  • add the get_boot_mode command to read the boot mode set by BCU

Bug fix

  • disable bootmode_sel when using the command deinit
  • fix the https access issue when use command upgrade in linux

Bcu_1.0.216

Bug fix

  • fix the missing rail name print in dump file
  • fix the problem of low data accuracy of GROUP in dump file

Bcu_1.0.212

New Features

  • add [-hold=] option for reset command

Bug fix

  • fix channel name order issue in dump file

Bcu_1.0.209

New Features

  • add get_level function to get level state of a pin

Bug fix

  • fix the deinit command cannot work issue on imx8dxl
  • fix issue that cannot use uart after closing ftdi on Windows

Bcu_1.0.205

New Features

  • improve the terminal refresh method
  • print hot-key pressed state in csv dump file

Bug fix

  • fix imx8dxl sense resistors’ value

Bcu_1.0.203

New Features

  • replace command ‘resume’ by ‘onoff’, which can adjust the time to hold ON/OFF button by using option [-hold=](unit: ms)
  • drop imx8dxlevk rev A. The MODEL imx8dxlevk only support the imx8dxlevk-proto1B board now. The resistance of some sense resistors has been updated on the 1B board. If you are still using an old Rev A board, please use 1.0.195 or older BCU version.

Bug fix

  • fix read unexpected data for Windows version

Bcu_1.0.195

New Features

  • show rms values for power as well when set [-rms] options
  • add config.yaml version check
  • add 'uuu' command to download the latest UUU from GitHub
  • add set 'chmod a+x' for the new BCU after upgrade

Bug fix

  • remove board autodetect when using some of cmds
  • fix the error output of the auto-detect function
  • handle the impact of BCU downgrade on version info in config.yaml
  • hide the bootmode id when use command "lsbootmode"

Bcu_1.0.184

Bug fix

  • fix the bipolar flag lost issue.

Bcu_1.0.179

New Feature

  • add release note display when upgrade bcu.
  • add function to download PDF version of release note

Bcu_1.0.177

New Feature

  • add version compare function to avoid unnecessary upgrade.

Bcu_1.0.175

New Feature

  • use bipolar as default, [-unipolar] to limit the measure range.

Bcu_1.0.173

Bug fix

  • Link libcurl as a static library, so that 1604 and 1804 both can use it without installing other libs.

Bcu_1.0.166

New Features

  • get latest BCU from github release by using command upgrade
  • add PAC1934 bipolar measurement function by using option [-bipolar]
  • add pac1934 hardware filter enable option by using option [-hwfilter]
  • remove function "force using sudo to run BCU in linux version"

Bug fix

  • fix the uA display when current is negative
  • fix ftdi->info NULL issue

Bcu_1.0.158

New Features

  • the hot-key to reset avg/min/max will reset value in group too
  • remove all isfixedrange function
  • add groups editing function in the configuration file
  • force using sudo to run BCU in linux version
  • add group power in the dump .csv file
  • some display layout improvements

Bug fix

  • fixed high current resistor values for DXL board(by Seb Haezebrouck)
  • fix cannot choose reset boot mode on Win version
  • fix "stack smashing detected" issue on Linux version

Bcu_1.0.153

New Features

  • display all rails as unit mA as default
  • add reset board hot-key in monitor function
  • set all sense resistor to the small one when reset the board
  • disable "isfixedrange" function. Now BCU can change sense resistor when runs with the max read speed
  • add resume function for BCU CMD and monitor
  • add four groups for imx8dxl and imx8mp evk boards

Bug Fix

  • fix max_length uninitialized problem
  • fix the issue when switch between two ports

Bcu_1.0.151

New Features

  • Switch libyaml to submodule. Need install libyaml-dev on Linux environment.

Bcu_1.0.139

New Features

  • support change rails display order by set show_id in config.yaml.
  • support pcal6524h of imx8mpddr3l and imx8mpddr4.
  • support fixed extra SR in config.yaml to make BCU read faster.
  • Keep different i2c channels of ft4232 opened to save time for build dev list.

Bug fix

  • fix the group value when rails use uA to display.
  • fix boot mode read issue when board doesn't support boot mode.
  • fix the letter before rail when rail number is greater than 26.
  • fix reset function.

Bcu_1.0.133

New Features

  • add yaml config file support, can modify rsense value in the config file. “show_id” function is not ready now.
  • add hotkey “4” to switch Auto/uA/mA display.

Bug fix

  • try more times when PAC1934 cannot access.

Bcu_1.0.130

New Features

  • sensing resistors changes after rework on i.MX8MPEVK-PWR

NOTE:

Please make sure your imx8mp power cpu board has done this rework:

  • Replace R76 from 0.4Ohm to 1.0Ohm

  • Replace R129 from 0.1Ohm to 0.05Ohm

  • Replace R208 from 1.0Ohm to 0.4Ohm

  • Replace R225 from 2.0Ohm to 1.0Ohm

  • Replace R227 from 2.0Ohm to 1.0Ohm

Or please use the old version of BCU.

  • exit BCU when cannot reach PAC1934
  • option [-hz] support float number now
  • support option -hz= when use option -nodisplay
  • add "*" before the location name if it shows uA/uWatt at this time
  • add option [-rms] for function monitor to show Root-mean-square instead of average
  • add i.MX8MPDDR3L board support
  • add i.MX8MPDDR4 board support

Bug Fix

  • fix issue of cannot use csv name length < 3
  • reduce display rows

Bcu_1.0.128

New Features

  • split imx8mpevk and imx8mpevkpwr. imx8mpevk does not support power measurement
  • add auto detect board function for imx8mpevkpwr and imx8dxlevk
  • add 8DXL DDR3 board support

Bug Fix

  • update the res value of vdd_pll_ana_1v8
  • fix reseting from sd for imx8dxlevk and imx8dxl_ddr3_evk

Bcu_1.0.119

New Features

  • change measure voltage from VSENSE+ to VSENSE-
  • show the value with unit uA when the current avg is less than 1mA
  • add -nodisplay option
  • add hot key to refresh avg and maxmin value
  • add refresh frequence option -hz
  • improve dump speed

Bug Fix

  • fix the "Cannot read ACK" issue for Windows version

1.0.115-1.0.117

New Features

  • support imx8mp power measurement board
  • improve the speed of reading power values for Linux version
  • add current range display
  • add dump filename option

Bug fix

  • fix the res value of 1v8_1 on imx8dxl

7 Known issue

  • The speed of reading power values is very slow.(Windows version) (Solved)
  • When reading power data, erroneous data may be read. (Windows version) Not sure if it is caused by some debug cables. (Solved)
  • Lsftdi CMD sometimes fails when the debug cable is just plugged in. (Both versions)
  • 8ulp cannot use option [-boothex=] in command reset, because the bootmode and boot config are split in 1.1.28.

Clone this wiki locally