-
Notifications
You must be signed in to change notification settings - Fork 21
Home
Ver. 1.1.118
2025.5.7
| 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 |
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]

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.
- Windows 10, 64bit
- Need install FTDI Driver for Windows.
- Early Windows version(below 1.2.0) need install vs2017 redistribute package
- 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
- Please install BCU from Snap Store, no libs need to be installed.
- 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
- Need install libftdi, libyaml-dev and openssl
- 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.
- Need install Homebrew firstly
- 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
- Apple Silicon can run x64 binary with Rosetta 2, but all libs should be installed to the path which is same as x64.
BCU is licensed under the BSD license. See LICENSE.
$ sudo ./bcu command \[-options\]
- Connect the computer and the board through the debug cable;
- Power on the board;
- 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
- Check supported boards;
$ sudo ./bcu lsboard
- Check supported GPIO of the board;
$ sudo ./bcu lsgpio -board=imx8dxlevk
- Check the boot modes supported by the board;
$ sudo ./bcu lsbootmode -board=imx8dxlevk
- Reset the board and boot to the selected boot mode;
$ sudo ./bcu reset **\[BOOTMODE_NAME\]** -board=imx8dxlevk \[-hold=\]
- 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.
- Set the boot mode;
$ sudo ./bcu set_boot_mode emmc -board=imx8dxlevk
- Set a GPIO to low for 3 seconds;
$ sudo ./bcu set_gpio onoff 0 -hold=3000 -board=imx8dxlevk
- Get a GPIO level state;
$ sudo ./bcu get_level pmic_stby -board=imx8dxlevk
| 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 |
| 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
|
- 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 (-100mA **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. |
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) |
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.
- If the EEPROM content is empty, BCU will make a warning.

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

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.

If the eeprom on the board has been flashed, please use this command to read manually.
$ sudo ./bcu eeprom -r

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.
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-1If want to reset id=1-1 board
$ sudo ./bcu reset [BOOTMODE_NAME] [-board=imx8mpevk] -id=1-1
Some tests need run BCU monitor and dump functions in the background. Please follow this steps to do the background test.
-
Please download the latest BCU ( at least 1.0.246 ).
-
Use this command to trigger the BCU power dump:
$ sudo ./bcu monitor -board=xxx-id=yyy-dump=zzz-nodisplay> /dev/null& -
Use this command to terminate the BCU in the background:
$ sudo kill -2BCU_PID
For now, we have two platforms support OpenOCD: imx8mp and imx8dxl.
Take imx8mp as an example to illustrate the use of OpenOCD.
- 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
- Get the config files of imx8mp
- Plug-in the UART debug cable
- Run bcu reset command to enable the JTAG Remote Control function
$ sudo bcu reset emmc/sd/… -board=imx8mpevk
- Run openocd service
$ openocd -f tcl/interface/ftdi/imx8mp-evk.cfg -f tcl/board/imx8mp-evk.cfg
- Start telnet or gdb to debug
$ telnet 127.0.0.1 4444
BCU supports these boards now.
| [-board=]string | Board/Platform |
|---|---|
| imx8mpevk | 8MPLUS-BB with 8MPLUSLPD4-CPU board. Supported:
$ sudo ./bcu reset [boot_mode]<br>-board=imx8mpevk [-id=]
|
| imx8mpevkpwra0/imx8mpevkpwra1 | 8MPLUS-BB with 8MPLUSLPD4-PWR board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx8mpevkpwra1] [-id=]
|
| imx8mpddr4 | i.MX8MPDDR4 VDB. Supported:
$ sudo ./bcu monitor -board=imx8mpddr4<br>[-id=]
|
| imx8dxlevk/imx8dxlevkc1 | imx8dxlevk with lpddr4 board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx8dxlevk] [-id=]
|
| imx8dxl_ddr3_evk | imx8dxlevk with ddr3 board. Supported:
$ sudo ./bcu reset [boot_mode]<br>-board=imx8dxl_ddr3_evk [-id=]
|
| imx8dxl_obx | imx8dxl_obx board: Supported:
$ sudo ./bcu reset [boot_mode] -board=imx8dxl_ddr3_evk [-id=] |
| imx8ulpevk/imx8ulpevkb2/imx8ulpevk9 | imx8ulpevk board. Supported:
$ sudo ./bcu reset [boot_mode] [-board=imx8ulpevk] [-id=] |
| imx8ulpwatchval | imx8ulpwatchval board. Supported:
$ sudo ./bcu monitor<br>[-board=imx8ulpevkwatchval] [-id=] [-hz=]
|
| imx8ulpwatchuwb | imx8ulpwatchuwb board. Supported:
$ sudo ./bcu monitor<br>[-board=imx8ulpwatchuwb] [-id=] [-hz=]
|
| val_board_1 | val_board_1 board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=val_board_1] [-id=]
|
| val_board_2 | val_board_2 board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=val_board_2] [-id=]
|
| val_board_3 | val_board_3 board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=val_board_3] [-id=]
|
| imx93evk11/imx93evk11b1 | i.MX93 11x11 EVK board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx93evk11b1] [-id=]
|
| imx93evk14 | i.MX93 14x14 EVK board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx93evk14] [-id=]
|
| imx93qsb | i.MX93 QSB board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx93qsb] [-id=]
|
| imx95evk19 | i.MX95 19x19 EVK board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx95evk19] [-id=]
|
| imx943evk19a0/imx943evk19b1 | i.MX943 19x19 EVK board. Supported:
$ sudo ./bcu reset [boot_mode]<br>[-board=imx943evk19b1] [-id=]
|
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.
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 |
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 |
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 |
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 |
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 |
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 |

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
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 |
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 |
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.
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:

“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
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.
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.
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.
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:
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.
Please refer to Section 2.4 for some statistics and sampling setting options.
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.
- download Visual Studio 2017 or latest community version (free)
> git clone https://github.com/NXPmicro/bcu.git> git submodule update --init- open Board_Control_Utilities.sln by VS
- select the build type as "Release"
- click build button
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
-
install Homebrew to /usr/local/bin:
$ /bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)" -
install the following package with homebrew to /usr/local/Cellar:
$ brew install pkgconfig libftdi libyaml -
$ cd bcu/ -
$ git submodule update --init -
$ cmake . -
$ make
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)
- correct the gpio name for imx943evk19a0 and imx943evk19b1
- fix eeprom content of imx943evk19b1
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
- Some bug fixes
- Please pay attention for the usage of M7 UART on i.MX95.
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
Fix
- Fix imx91 11x11 evk bootmode list issue
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
New Feature
- Add i.MX95 15x15 EVK board support
- Add i.MX91 11x11 EVK board support
- Add i.MX91 QSB board support
New Feature
- Add i.MX95 19x19 EVK board support
- Show Serial Number when use lsftdi command
Bug Fix
- Remove the unsupported gpio pins on imx93qsb.
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
New Feature
- Add imx93 11x11 evk board support
New Feature
- Add imx8ulp watch val board support
New Feature
- Add imx8ulp-evkb2 board support
Bug Fix
- Fix imx8dxlevk’s segfault.
New Features
- Add imx8ulp-evk9 board support
Bug Fix
- keep FTDI bus B open when exiting BCU, if no UART uses it.
New Features
- Add temperature sensor support
- Add temperature sensor support in monitor function
Bug Fix
- Fix some display issues
New Features
- Support server function
- Support option -pre to download pre-released bcu
New Features
- Support val_board_2
New Features
- improve the sampling rate
- remove imx8mpddr3l board
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
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()
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
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
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
New Features
- Support imx8ulp-evk board
- Improve get_boot_mode print context
- Add -boothex= and -bootbin= to support setting more boot mode
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)
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
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
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
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
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
Bug fix
- fix the missing rail name print in dump file
- fix the problem of low data accuracy of GROUP in dump file
New Features
- add [-hold=] option for reset command
Bug fix
- fix channel name order issue in dump file
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
New Features
- improve the terminal refresh method
- print hot-key pressed state in csv dump file
Bug fix
- fix imx8dxl sense resistors’ value
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
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"
Bug fix
- fix the bipolar flag lost issue.
New Feature
- add release note display when upgrade bcu.
- add function to download PDF version of release note
New Feature
- add version compare function to avoid unnecessary upgrade.
New Feature
- use bipolar as default, [-unipolar] to limit the measure range.
Bug fix
- Link libcurl as a static library, so that 1604 and 1804 both can use it without installing other libs.
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
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
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
New Features
- Switch libyaml to submodule. Need install libyaml-dev on Linux environment.
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.
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.
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
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
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
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
-
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.