Gil,
UART4 is the default console used by TF-A(First stage bootloader), U-boot(Second stage bootloader) and kernel. So, you will see messages on UART4 when booting before the kernel is initialized.
You can load FSBL, SSBL using Cube Programmer and possibly setup kernel boot and Root Filesystem via USB(Ethernet over USB) as well.
Pinmuxing is defined as early as ROM code. But, it is limited to the boot interface. See for example, which pins are used by default for an SD card boot here: https://wiki.st.com/stm32mpu/wiki/STM32MP15_ROM_code_overview#Boot_from_SD_card
TF-A, u-boot and kernel can define further pin multiplexing using their device trees.
STDOUT is defined for TF-A, U-boot and kernel. TF-A is the first binary that outputs messages to STDOUT(UART4 by default)
You can use ST’s Cube Programmer(https://www.st.com/en/development-tools/stm32cubeprog.html) to load an image to eMMC.
I recommend you stick to reference design pin muxing for SD card/eMMC and USB to have an easier time booting and programming your board.
Best,
Neeraj
amolina,
This work has already been done for you in the meta-octavo-osd32mp1 layer. Please see https://github.com/octavosystems/meta-octavo-osd32mp1/tree/dunfell/recipes-bsp/u-boot/files for all the modifications(Device tree + source code) added to the u-boot source via patches. This is done for TF-A, U-boot and Kernel.
You can use your own customizations and layers in addition to the meta-octavo-osd32mp1 layer as Yocto allows you to do that. You will need to use the machine name “osd32mp1-red” to build for the RED board. You can make the modifications you need for the machine here: https://github.com/octavosystems/meta-octavo-osd32mp1/blob/dunfell/conf/machine/osd32mp1-red.conf.
Best,
Neeraj
Stjepan,
In addition, please take a look at ST’s power consumption measurement app note here: https://www.st.com/resource/en/application_note/an5284-stm32mp1-series-system-power-consumption-stmicroelectronics.pdf. The reference board that they use to make measurements on has the same PMIC+STM32MP1+DDR configuration. The only difference being EV1 used in the app note has 1GB memory and BRK has 512MB.
Best,
Neeraj
amolina,
Please take a look at https://github.com/octavosystems/meta-octavo-osd32mp1 meta layer that adds support for OSD32MP1-RED to OpenSTLinux Yocto compatible distribution. You can follow the instructions in README to generate an image for OSD32MP1-RED.
Best,
Neeraj
Stjepan,
Please see reply to the issue on the repo. Please make sure you are running Docker and that you have all the dependencies isntalled.
Best,
Neeraj
Stjepan,
There is no optimization to be done for shutdown as no software is running on STM32MP1. The wakeup source from this state would be the PMIC_PONKEYN.
You can add a power switch ahead of VIN to further reduce current consumption by setting the PMIC to power down state.
Best,
Neeraj
Gil,
Agree with aedan here. Try disconnecting RX from RPi and see if the boot goes past u-boot command prompt.
It is perplexing that connecting the UART to RPi gives you good logs, but not with a UART-USB adapter.
Can you scope the RX and TX pins and compare the activity when you connect to RPi and get good log output vs when you get the garbage output?
Best,
Neeraj
Ashvin,
Agree with Carlos. In addition, make sure there is no device on the CLK pin when you are trying to verify the function to eliminate any external pull on the pin from a bad sink.
If you continue to face issues, I recommend the following steps to debug this:
1. Verify that you can exercise the SPI interface you intend to use in Engineering Mode via JTAG. Please see https://octavosystems.com/forums/topic/getting-started-with-osd32mp1-brk-st-link-jtag-interface/
2. Verify pinctrl. See example device tree here: https://github.com/STMicroelectronics/linux/blob/v5.10-stm32mp/arch/arm/boot/dts/stm32mp15-m4-srm.dtsi and https://github.com/STMicroelectronics/linux/blob/v5.10-stm32mp/arch/arm/boot/dts/stm32mp15-m4-srm-pinctrl.dtsi#L432
3. verify Clock tree to make sure that the SPI peripheral you are trying to operate is getting good clock: https://wiki.st.com/stm32mpu/wiki/STM32MP15_clock_tree
Some resources that you can refer to:
1. https://wiki.st.com/stm32mpu/wiki/How_to_assign_an_internal_peripheral_to_a_runtime_context
2. https://wiki.st.com/stm32mpu/wiki/How_to_configure_system_resources
3. https://wiki.st.com/stm32mpu/wiki/STM32CubeMP1_development_guidelines
Best,
Neeraj
Stjepan,
Your measurements look normal, except may be the power consumption when the system is powered off. It should be closer to 0mA as VIN only goes to the PMIC and nothing else on the board is powered.
You can optimize the boot time, please take a look at https://wiki.st.com/stm32mpu/wiki/How_to_optimize_the_boot_time.
Best,
Neeraj
Stjepan,
The low power modes were not fully implemented in OpenSTLinux 1.x. Can you try upgrading the image by generating a new image from Debian SDK here: https://github.com/octavosystems/osd32mp1-debian.
Best,
Neeraj
Farid,
Can you take a look at the logs from the board(out of UART4 console)? It seems like error is occurring at U-boot stage on the board before DFU actions are performed. The board console logs will tell you exactly where it is getting stuck.
Please also try to update your Cube Programmer version to 2.9 or greater. We have seen failures like then when using an incompatible version of Cube Programmer.
Best,
Neeraj
Gil,
I was able to set frequencies for them on CubeMX without issue via PLL3. You should be good, but please make sure you are okay with the clock tree in CubeMX.
Best,
Neeraj
Jeff,
Please see the following inputs for your design:
1. It looks like TI does not support the PHY you are using: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/973865/am3358-network-port-expansion-with-dm9000?tisearch=e2e-sitesearch&keymatch=dm9000#. Note that GPMC interface is being used for interfacing between AM335x and DM9000. GPMC_AD[0:7], GPMC_CSN[1:2] are not available externally for OSD335x CSiP as they are used to connect to an eMMC inside the device.
2. Please see https://www.ti.com/tool/TMDSSK3358#design-files for an example of 2 RGMII ports being used for AM335x. All pins needed for RGMII1 and RDMII2 are present in OSD335x C-SiP. Please see pin mapping between AM335x and OSD335x CSiP here: https://octavosystems.com/app_notes/am335x-signal-to-osd335x-pins/
We recommend using a different PHY.
Best,
Neeraj
Gil,
I recommend you start a design in STM32CubeMX(https://www.st.com/en/development-tools/stm32cubemx.html) and look at the “Clock tree” section to understand all the constraints you will face while clocking your interfaces. You can browse example projects like STM32MP157C-DK2 to see how a reference clock tree is implemented.
Best,
Neeraj
Gil,
To summarize, does the following describe the board behavior you are observing?
1. You can see bootloader(tf-a/u-boot) console logs when you connect UART4 to RPi
2. You can see kernel logs when you use a USB-C cable presumably through ssh?
Can you post a picture of the ‘garbage’ output on UART?
Best,
Neeraj
Octavo Systems LLC all rights reserved
OCTAVO is registered in the U.S. Patent and Trademark Office. OSD, C-SiP, and the Octavo Logo are trademarks of Octavo Systems LLC.
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields