Part Number: PROCESSOR-SDK-TDAX
There are two ways to send embedded metadata in MIPI protocol.
1, Metadata with same data type as image/video data.
2, Metadata with the data type as 0x12, different from image/video data.
The current PSDKRA already supports capturing embedded metadata, when it is sent using #1. This article provides the method to capture embedded metadata when it is sent using #2.
Part Number: TMS320C6657
How to run NIMU EMAC example in TI-RTOS SDK?
Part Number: TMS320C6657
Hi,
How to wake the second core by the first core in C6657 ? What is Boot-magic Address / Jump boot address ?
Part Number: TDA4VM
On the SDK 8.02 the keywriter build fails with the below error:
Compiling j721e_evm:j721e:mcu1_0:release:keywriter_img: /nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/init.asm Converting binary file [/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/tifs_bin/j721e/ti-fs-keywriter.bin] to C array .. Done. (262084 bytes) # Compiling j721e_evm:j721e:mcu1_0:release:keywriter_img:/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/main.c # Compiling j721e_evm:j721e:mcu1_0:release:keywriter_img:/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/common/pmic_example.c # Compiling j721e_evm:j721e:mcu1_0:release:keywriter_img:/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/j721e/keywriter_utils.c # Linking into /nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/binary/j721e/keywriter_img_j721e_release.xer5f... # "/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/common/linker.lds", line 93: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment fails for section ".const.devgroup.MAIN" size 0x3ea6. Available memory ranges: OCMRAM_Keywriter size: 0x72e00 unused: 0x23 max hole: 0x1e "/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/common/linker.lds", line 97: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment fails for section ".boardcfg_data" size 0x2d08. Available memory ranges: OCMRAM_Keywriter size: 0x72e00 unused: 0x23 max hole: 0x1e "/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/common/linker.lds", line 103: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. run placement with alignment fails for section ".sysmem" size 0x2000. Available memory ranges: OCMRAM_Keywriter size: 0x72e00 unused: 0x23 max hole: 0x1e "/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/common/linker.lds", line 100: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. run placement with alignment fails for section ".bss.devgroup.MAIN" size 0xfe0. Available memory ranges: OCMRAM_Keywriter size: 0x72e00 unused: 0x23 max hole: 0x1e "/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/common/linker.lds", line 87: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment fails for section ".startupData" size 0x314. Available memory ranges: OCMRAM_Keywriter size: 0x72e00 unused: 0x23 max hole: 0x1e "/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/common/linker.lds", line 101: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. run placement with alignment fails for section ".bss.devgroup.MCU_WAKEUP" size 0x214. Available memory ranges: OCMRAM_Keywriter size: 0x72e00 unused: 0x23 max hole: 0x1e "/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/common/linker.lds", line 85: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment fails for section ".bootCode" size 0xfc. Available memory ranges: OCMRAM_Keywriter size: 0x72e00 unused: 0x23 max hole: 0x1e "/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/soc/common/linker.lds", line 95: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment fails for section ".cinit" size 0x44. Available memory ranges: OCMRAM_Keywriter size: 0x72e00 unused: 0x23 max hole: 0x1e error #10010: errors encountered during linking; "/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00 _36/packages/ti/boot/keywriter/binary/j721e/keywriter_img_j721e_release.xer5 f" not built tiarmclang: error: tiarmlnk command failed with exit code 1 (use -v to see invocation) /nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/build/makerules/rules_ti_cgt_arm.mk:347: recipe for target '/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/binary/j721e/keywriter_img_j721e_release.xer5f' failed make[2]: *** [/nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/boot/keywriter/binary/j721e/keywriter_img_j721e_release.xer5f] Error 1 /nhome/sdk/ti-processor-sdk-rtos-j721e-evm-08_01_00_13/pdk_jacinto_08_01_00_36/packages/ti/build/makerules/common.mk:410: recipe for target 'mcu1_0' failed make[1]: *** [mcu1_0] Error 2 makefile:360: recipe for target 'keywriter_img' failed make: *** [keywriter_img] Error 2
Part Number: 66AK2E05
HI,
How to flash the u-boot into SPI of K2E ?? using PROCESSOR-SDK-LINUX-K2E
Regards
Shankari G
Part Number: 66AK2E05
HI,
How to build u-boot for K2E ? from the package "PROCESSOR-SDK-LINUX-K2E"
Regards
Shankari G
Part Number: TDA4VM
Hi,
I have a new Flash device on TDA4VM. Is there a guide available to add support for that?
Part Number: TMS320C6657
Hi,
How to solve the Cerrno Error in the Platform test example of PDK in processor SDK 6.3 ?
Part Number: TMS320C6657
Hi,
How to solve the CSL errors in the Platform test example of PDK in processor SDK 6.3 ?
Part Number: SK-AM64
Am sharing this in case it helps others.
I have spent about two days trying to
It is a bit remarkable to me that a board with a RPi-compatible connector has the power disabled by default in the as-provided boot images and meta-ti layer.
I had to teach myself a bunch of things which many folks probably already know, but maybe some do not. These are the things I wish I had known.
How Power Is Switched on the AM64x SK Board
3.3V and 5V power to the connector are switched by a pair of GPIO's that are attached to a TCA9538PWR I2C GPIO expander chip. This is on p. 38 of the board schematic. The signals of interest are RPI_PS_3V3_En and RPI_PS_5V0_En.
The good news is that this expander and these pins are defined in the device tree supplied by TI; you just need to figure out how to get to them.
How to Toggle the GPIO's
If you come from a Beaglebone world, you are used to what's called the "sysfs GPIO interface". This is not supported in the as-shipped resources, which is somewhat to be expected, as you can find repeatedly on the internet that the sysfs interface has been deprecated.
What's not often specified very clearly is what has replaced it. The answer is libgpiod. Now, libgpiod is just a set of libraries, no utilities. But there is also libgpiod-tools, and those include utilities like "gpioinfo", "gpioset", and so on, that you can use to access the GPIO's.
So, if you're building an OS image with Arago / Yocto, you want to include this in your image's recipe or in a packagegroup that it uses:
RDEPENDS_${PN} = "\
    libgpiod \
    libgpiod-tools \
    ...
Then once you bitbake and flash that image, to turn on the power, you can use this command.
gpioset 1-0070 5=1 6=1
Breaking it down,
Now, if you read the man page for gpioset, you find that the values you have set are not guaranteed to persist once gpioset returns. So your enabling of these pins might persist, but it may well simply be transient. You can get around this with the --mode=wait flag, but that ties up your command line.
Most likely what you want is to get your command line back yet have the values persist. You can use "gpioset --mode=wait ... &", but that's not really what you want - it does work, but it goes to sleep in the background waiting for user input.
Most likely what you want, at least in the case of a pin setting that that you want to be pseudo-permanent like power enable, is
gpioset --background --mode=signal 1-0070 5=1 6=1
The --background flag is similar to the "&", but it is compatible with "--mode=signal". This line will turn on the GPIO's, then the task will go into the background as a daemon, basically doing nothing but keeping its hold on the GPIO character device so that the pins do not revert to their default values.
If you do want to revert to 0 (power off), you simply kill the process and then just to be sure, follow up with
gpioset 1-0070 5=0 6=0
Where did the 1-0070 come from?
gpiodetect is a useful command (shown here on my machine segB1):
root@segB1:~# gpiodetect
gpiochip0 [omap-gpmc] (2 lines)
gpiochip1 [1-0070] (8 lines)
gpiochip2 [600000.gpio] (87 lines)
gpiochip3 [601000.gpio] (88 lines)
gpiochip4 [tpic2810] (8 lines)
We see the 1-0070.
You can then do this to see the individual lines that are available on that device
root@segB1:~# gpioinfo 1-0070
gpiochip1 - 8 lines:
        line 0: "GPIO_CPSW2_RST" unused input active-high
         line 1: "GPIO_CPSW1_RST" unused input active-high
         line 2: "PRU_DETECT" unused input active-high
         line 3: "MMC1_SD_EN" "fixed-regulator-sd" output active-high [used]
         line 4: "VPP_LDO_EN" unused input active-high
         line 5: "RPI_PS_3V3_En" "gpioset" output active-high [used]
         line 6: "RPI_PS_5V0_En" "gpioset" output active-high [used]
         line 7: "RPI_HAT_DETECT" unused input active-high
And we see our pins of interest there. Don't worry if they happen to be listed as inputs instead of outputs. That's just the OS guessing. Once you use the pin with gpioset, it will know.
When you're first trying to get your bearings, you can use gpiofind to find a pin by name. (The pin names are as given in the device tree file k3-sk642-evm.dts in the TI source tree.)
root@segB1:~# gpiofind RPI_PS_3V3_En
gpiochip1 5
It turns out that "gpiochip1" is just an alias for "1-0070" - you can use either term in the gpioset or gpioinfo commands:
Automatically Enabling Pi HAT Power on Boot
Assuming your Yocto/Arago build is using systemd (this is common, I believe), then what we can do is create a system service that turns on the power at boot. I named my service "rpi-connector-power". Once you've defined the service, then you can
To define the service, you create a file /lib/systemd/system/rpi-connector-power.service that defines the service. This file will basically specify the gpioset commands to turn power on and off.
I'll show you that file in a second, but most likely you simply want to have this be installed as part of your Yocto/Arago image. So here's how to do that.
The rpi-connector-power Recipe
This is what I did. I created a recipe that automatically sets up systemd with our service and that enables that service by default. We use the systemd.bbclass class from OpenEmbedded as a helper.
You should create these files and folders in your own custom Yocto layer (a.k.a. folder tree - I wish someone had told me in the beginning that a layer is just a fancy name for a folder tree), that you have added to build/conf/bblayers.conf.
Within your layer,
And lastly, here are the contents of those two files. Note that I list the license as "CLOSED" for the recipe, but that's just a convenience for me during development. Feel free to reuse this content and assign whatever license you like to it to your own work product.
rpi-connector-power.bb
DESCRIPTION = "Automatically turn on power to RPi HAT connector at boot"
# See the docs for systemd.bbclass for info
# Turns on the 3.3V power on bit 5, and the 5V power on bit 6, of I2C expander
# GPIO device 1-0070:
# gpioinfo 1-0070
#gpiochip1 - 8 lines:
# line 0: "GPIO_CPSW2_RST" unused input active-high
# line 1: "GPIO_CPSW1_RST" unused input active-high
# line 2: "PRU_DETECT" unused input active-high
# line 3: "MMC1_SD_EN" "fixed-regulator-sd" output active-high [used]
# line 4: "VPP_LDO_EN" unused input active-high
# line 5: "RPI_PS_3V3_En" unused output active-high
# line 6: "RPI_PS_5V0_En" unused input active-high
# line 7: "RPI_HAT_DETECT" unused input active-high
# If the license is anything other than CLOSED, then you have to provide LIC_FILES_CHKSUM.
LICENSE = "CLOSED"
inherit systemd
SYSTEMD_AUTO_ENABLE = "enable"
SYSTEMD_SERVICE:${PN} = "rpi-connector-power.service"
SRC_URI_append = " file://rpi-connector-power.service \
 "
RDEPENDS_${PN} += " libgpiod-tools"
do_install() {
 install -d ${D}/${systemd_unitdir}/system
 install -m 0644 ${WORKDIR}/rpi-connector-power.service ${D}/${systemd_unitdir}/system
}
FILES:${PN} += "${systemd_unitdir}/system/rpi-connector-power.service"
rpi-connector-power.service
# Turns on and off the 3.3V power on bit 5, and the 5V power on bit 6, of I2C expander
# GPIO device 1-0070.
# To turn on the power, you start the service, then stop it to turn it off.
# $ gpioinfo 1-0070
# gpiochip1 - 8 lines:
# line 0: "GPIO_CPSW2_RST" unused input active-high
# line 1: "GPIO_CPSW1_RST" unused input active-high
# line 2: "PRU_DETECT" unused input active-high
# line 3: "MMC1_SD_EN" "fixed-regulator-sd" output active-high [used]
# line 4: "VPP_LDO_EN" unused input active-high
# line 5: "RPI_PS_3V3_En" unused output active-high
# line 6: "RPI_PS_5V0_En" unused input active-high
# line 7: "RPI_HAT_DETECT" unused input active-high
#
[Unit]
Description=Turn power on or off to the Raspberry Pi user connector on the AM64x SK board
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/usr/bin/gpioset --background --mode=signal 1-0070 5=1 6=1
ExecStop=/bin/sh -c "/bin/kill -TERM `ps -ef | grep 'gpioset --background --mode=signal 1-0070 5=1 6=1' | grep -v grep | awk '{print $2}'` && gpioset 1-0070 5=0 6=0"
[Install]
WantedBy=multi-user.target
Now bitbake your image and flash it. On next boot, you can verify that it is working by verifying that the gpioset process is running in the background
root@segB1:~# ps -ef | grep gpioset
root 401 1 0 01:47 ? 00:00:00 /usr/bin/gpioset --background --mode=signal 1-0070 5=1 6=1
and by checking with your voltmeter that there is 3.3V between pins 6 and 1 of the user connector, and 5V between pins 6 and 2.
As stated earlier, you can turn the power off with
systemctl stop rpi-connector-power
and turn it back on with
systemctl start rpi-connector-power
Hope this has been useful.