返回主目录 tda4系列
TI推出的 edgeai starter-kit (后称为SK板) 是一款针对边缘AI的开发板,针对Linux开发者设计,用户不需要了解底层RTOS的框架即可进行AI应用的开发。
与TI的官方EVM使用同一SDK进行开发,使得我们有可能通过简单的配置,将EVM的开发环境及开发步骤应用于SK板。
默认SK板的硬件都由Linux控制,包括DP显示, CSIRX的mipi输入,i2c接口等。
通过GPIO控制使能HDMI显示端口,但是在Linux中禁用HDMI.
您可能需要登陆才能查看下方代码
禁用相关外设, 并配置CSIRX端口至QSH-ti cam接口,而不是 raspberry pi camera 接口。
@@ -0,0 +1,81 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * edgeai-apps: device-tree overlay
+ *
+ * Copyright (C) 2019 - 2021 Texas Instruments Incorporated - http://www.ti.com/
+ */
+
+#include "k3-j721e-rtos-memory-map.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/pinctrl/k3.h>
+
+&main_i2c3 {
+ status = "disabled";
+};
+
+&serdes_wiz4 {
+ status = "disabled";
+};
+
+&mhdp {
+ status = "disabled";
+};
+
+&dss {
+ status = "disabled";
+};
+
+// &main_i2c1 {
+// status = "disabled";
+// };
+
+&ti_csi2rx0 {
+ status = "disabled";
+};
+
+&ti_csi2rx1 {
+ status = "disabled";
+};
+
+
+&main_pmx0 {
+ main_rpi_cam0_reset_pins_default: main-rpi-cam0-reset-pins-default {
+ pinctrl-single,pins = <
+ J721E_IOPAD(0x1D4, PIN_OUTPUT, 7) /* (Y3) SPI1_CS0 */
+ >;
+ };
+
+ main_rpi_cam1_reset_pins_default: main-rpi-cam1-reset-pins-default {
+ pinctrl-single,pins = <
+ J721E_IOPAD(0x1E0, PIN_OUTPUT, 7) /* (Y5) SPI1_D0 */
+ >;
+ };
+
+ main_csi_mux_sel2_pins_default: main-csi-mux-sel2-pins-default {
+ pinctrl-single,pins = <
+ J721E_IOPAD(0x164, PIN_OUTPUT, 7) /* (V29) RGMII5_TD2 */
+ >;
+ };
+};
+
+&main_gpio0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&main_csi_mux_sel2_pins_default>;
+
+ csi-mux-hog {
+ /* CSI_MUX_SEL_2 */
+ gpio-hog;
+ gpios = <88 GPIO_ACTIVE_HIGH>;
+ output-low;
+ line-name = "CSI_MUX_SEL_2";
+ };
+
+ csi-rstz {
+ /* CSI_MUX_SEL_2 */
+ gpio-hog;
+ gpios = <78 GPIO_ACTIVE_LOW>;
+ output-high;
+ line-name = "CSI_CAM_RSTz";
+ };
+};
使用HDMI进行显示
#ifdef BUILD_MCU_BOARD_DEPENDENCIES #define ENABLE_CSI2RX #define ENABLE_CSI2TX /* IMPORANT NOTE: * - Only one of ENABLE_DSS_SINGLE or ENABLE_DSS_DUAL should be defined * - When ENABLE_DSS_SINGLE is defined, only one of ENABLE_DSS_HDMI or ENABLE_DSS_EDP should be defined * - When ENABLE_DSS_DUAL is defined, ENABLE_DSS_HDMI and ENABLE_DSS_EDP are not used, both EDP and HDMI are enabled unconditionally */ #define ENABLE_DSS_SINGLE #define ENABLE_DSS_HDMI /* define below to enable eDP display, make sure to undef ENABLE_DSS_HDMI & ENABLE_DSS_DSI as well */ //#define ENABLE_DSS_EDP #undef ENABLE_DSS_EDP /* define below to enable HDMI display, make sure to undef ENABLE_DSS_EDP & ENABLE_DSS_DSI as well */ //#undef ENABLE_DSS_HDMI /* define below to enable DSI display, make sure to undef ENABLE_DSS_HDMI & ENABLE_DSS_EDP as well */ #undef ENABLE_DSS_DSI #define ENABLE_I2C #define ENABLE_BOARD #else
修改makefile,编译SK版的mcu2.0固件
# Inter-core virtual ethernet support # Supported Values: yes | no ifneq (,$(filter yes,$(BUILD_CPU_MCU2_0))) ifeq ($(BUILD_QNX_A72),yes) ETHFW_INTERCORE_ETH_SUPPORT?=no else ETHFW_INTERCORE_ETH_SUPPORT?=yes endif endif #do BUILD_EDGEAI?=yes # If set to no, then MCU core firmware will be built with NO board dependencies # (such as I2C, board specific PINMUX, DSS, HDMI, I2C, ETHFW, CSIRX, CSITX). Most of # the packaged vision_apps require these interfaces on the MCU for the EVM, but # when porting to a board other than an EVM, or using applications which control # these interfaces from the HLOS on A72 (such as EdgeAI kit), then this should be set # to 'no'. BUILD_MCU_BOARD_DEPENDENCIES?=yes ifeq ($(BUILD_EDGEAI), yes) #BUILD_MCU_BOARD_DEPENDENCIES=yes #vivozhang FIRMWARE_SUBFOLDER=vision_apps_eaik UENV_NAME=uEnv_$(SOC)_edgeai_apps.txt endif ifeq ($(BUILD_MCU_BOARD_DEPENDENCIES),no) BUILD_ENABLE_ETHFW=no endif BUILD_ENABLE_ETHFW=no # Need to export this variable so that the following xdc .cfg file can pick this up from the env: # ${PSDK_PATH}/vision_apps/platform/$(SOC)/rtos/mcu2_0/mcu2_0.cfg export BUILD_ENABLE_ETHFW # A72 OS specific Build flag BUILD_LINUX_A72?=yes BUILD_QNX_A72?=no
增加gpio的pinmux配置
static pinmuxPerCfg_t gGpio0PinCfg[] = { /* GpioCamCtrl -> GPIO0_64 -> AD28 */ { PIN_PRG0_PRU1_GPO1, PIN_MODE(7) | \ ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE) & (~PIN_PULL_DIRECTION)) }, /* GpioCamCtrl -> GPIO0_74 -> AG26 */ { PIN_PRG0_PRU1_GPO11, PIN_MODE(7) | \ ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE) & (~PIN_PULL_DIRECTION)) }, /* GpioCamCtrl -> GPIO0_75 -> AF27 */ { PIN_PRG0_PRU1_GPO12, PIN_MODE(7) | \ ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE) & (~PIN_PULL_DIRECTION)) }, /* GpioCamCtrl -> GPIO0_76 -> AF26 */ { PIN_PRG0_PRU1_GPO13, PIN_MODE(7) | \ ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE) & (~PIN_PULL_DIRECTION)) }, /* GpioCamCtrl -> GPIO0_77 -> AE25 */ { PIN_PRG0_PRU1_GPO14, PIN_MODE(7) | \ ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE) & (~PIN_PULL_DIRECTION)) }, /* GpioCamCtrl -> GPIO0_78 -> AF29 */ { PIN_PRG0_PRU1_GPO15, PIN_MODE(7) | \ ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE) & (~PIN_PULL_DIRECTION)) }, /* GpioCamCtrl -> GPIO0_79 -> AG29 */ { PIN_PRG0_PRU1_GPO16, PIN_MODE(7) | \ ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE) & (~PIN_PULL_DIRECTION)) }, {PINMUX_END} }; static pinmuxModuleCfg_t gGpioPinCfg[] = { {0, TRUE, gGpio0PinCfg}, {PINMUX_END} }; static pinmuxPerCfg_t gI2c3PinCfg[] = { /* camCtrl -> I2C3_SCL -> T26 */ { PIN_MMC2_CLK, PIN_MODE(4) | \ ((PIN_PULL_DIRECTION | PIN_INPUT_ENABLE) & (~PIN_PULL_DISABLE)) }, /* camCtrl -> I2C3_SDA -> T25 */ { PIN_MMC2_CMD, PIN_MODE(4) | \ ((PIN_PULL_DIRECTION | PIN_INPUT_ENABLE) & (~PIN_PULL_DISABLE)) }, {PINMUX_END} }; static pinmuxModuleCfg_t gI2cPinCfg[] = { {3, TRUE, gI2c3PinCfg}, {PINMUX_END} }; static pinmuxBoardCfg_t gBasicDemoPinmuxDataInfo[] = { {0, gDispPinCfg}, {1, gCaptPinCfg}, // {2, gGpioPinCfg}, {2, gI2cPinCfg}, {PINMUX_END} };