This version (07 Nov 2018 17:04) was approved by Chad Wentworth.The Previously approved version (06 Nov 2018 18:45) is available.Diff

Creating a boot image (dual-core ADSP-BF60x processors)

Since the ADSP-BF609 processor has multiple cores, there are additional considerations when building the LDR image for an application that has a unique DXE file for each core. For example, the project name appends _Core0 and _Core1 to differentiate between the two unique executable files targeting multiple cores on a single processor (e.g., BF609_MCAPI_remote_printf_Core0 and BF609_MCAPI_remote_printf_Core1). Each output directory contains a dedicated DXE file for that core, and special handling is required within the loader utility to create the appropriate LDR image to support the two unique DXE files in a single loader stream.

To build a LDR file supporting two cores, the LDR output itself must be generated by the Core1 project, as it is in the Core1 project that the dependencies on the Core0 project need to be set. As such, first build the Core0 project with the default DXE output and note the path to the DXE for inclusion later. Once the Core0 DXE is finalized, do the same for the Core1 project so that there are two finalized DXE files for the two unique cores on the processor.

If the initialization file for the ADSP-BF609 EZ-BOARD has not yet been generated, follow the guidance described for the ADSP-BF707 EZ-Kit in the previous section for the ADSP-BF609 EZ-BOARD and note the location of the generated initialization DXE for inclusion later as well.

Once the three DXE files are finalized, follow these steps to generate the required dual-core LDR file:

1. Click on the Core1 project name in the Project Explorer view to select it as the active project. 2. Right-click on the Core1 project name and select Properties, which opens the Properties window. 3. On the C/C++ Build → Settings page, select the Build Artifact tab, and use the Artifact Type pull-down to select Loader File. 4. On the Tool Settings tab, select the CrossCore Blackfin Loader → General page and verify the following settings:

  • Boot mode: Memory
  • Boot format: Intel Hex
  • Output width: 16 bits
  • Set the Boot code field to 0x6 to select 16-bit flash boot.
  • Verify that Use default start address is checked.

5. For the Initialization file, click Browse… and navigate to the \Debug directory for the initialization code built earlier and select the BF609_init_vxx.dxe file (where xx is the board revision).

It is at this point that the dependencies on the Core0 DXE need to be accounted for when generating the LDR file. As previously mentioned, the loader stream is broken up into blocks, with each block being sequentially processed by the boot ROM during boot time. Each block is prefixed with a specified header that contains special tag information that instructs the boot ROM how to process the data that follows the header. In a typical single-core application, the last block has a Final tag associated with it, indicating that the boot process will be complete when that block is processed. If this final tag is associated with the Core0 DXE’s final block, it will cause the boot process to exit as soon as that block has been processed, which would result in nothing being booted for the Core1 application. To avoid this behavior, the loader needs to be configured to treat Core0’s last block as a normal block such that booting will continue with the Core1 DXE after the Core0 DXE is fully loaded.

For more information about the ADSP-BF609 processor boot process, see the Boot ROM and Booting the Processor chapter of the ADSP-BF60x Blackfin Processor Hardware Reference.

To configure the loader to properly boot to both cores (continuing from above):

6. Go to the CrossCore Blackfin Loader → Additional Options page.

7. In the Additional options pane, click the Add… icon in the header bar, as shown in Figure 29:

Figure 3. Setting Additional Options in the Loader Settings Window

In the window that pops up, two directives must be added to the command line for the LDR file to be appropriately generated. The first item is the path to the Core0 DXE file (relative to the Core1 output directory). For example, consider a project directory structure like this:

Figure 4. Project Directory Structure

For this example, the correct pathname for the Core0 DXE relative to the location of the Core1 DXE would be:


The –NoFinalTag loader switch is also needed to skip insertion of the final tag for the indicated executable, as follows:


Continuing with the example:

8. In the Additional options field in the pop-up window, enter the text for the Core0 DXE path and the loader switch. Per the example above, this would be (on a single line):

..\..\TestProject_Core0\Debug\TestProject_Core0.dxe -NoFinalTag=..\..\TestProject_Core0\Debug\TestProject_Core0.dxe

If the pathnames contain spaces, they must be cared for by employing double-quotes and escape characters, e.g., “C:/Directory\ With\ Spaces/Debug/TestProject_Core0.dxe”.

9. Click OK to close the pop-up window, and click OK to close the Properties window. If prompted to regenerate LDF/startup code, select No.

10. Build the LDR file using the Project → Build Project pull-down.

Navigation - CCES Getting Started

resources/tools-software/crosscore/cces/getting-started/boot-app-bf60x.txt · Last modified: 07 Nov 2018 17:03 by Chad Wentworth