BSP模块开发

根据完整 SDK Tassadar-T32/T33-2.2.0-20260717 中的《T32/T33 BSP 应用开发指南》,T33 内部包含 2 个 VIC 和 1 个 ISP;T33 仅支持 CSI 输入,可通过 CSI PHY 接入 2 组 2-lane 或 1 组 4-lane。

BSP配置通则
Kernel配置方式
3.10.14make menuconfig、板级 board.h、平台 C 代码
4.4.94make menuconfig、arch/mips/boot/dts/ingenic/*.dts/*.dtsi
5.15.170make menuconfig、Ingenic DTS/DTSI

通用开发顺序:

1. 确认原理图中的引脚、复用功能、供电和上下拉。

2. 在 Kernel 中使能控制器和总线驱动。

3. 在 3.10 板级文件或 4.4/5.15 DTS 中配置引脚和参数。

4. 编译 Kernel 和对应外部模块。

5. 使用 Sample、/sys、/proc、dmesg 或仪器验证。

6. Kernel 变化后重新编译依赖其符号表的 .ko。


ISP

硬件连接:

• Sensor 通过 CSI_PHY 接入。

• 支持 2 个 2-lane 或 1 个 4-lane。

• T33 不支持 T32 的 DVP 输入。

ISP 驱动:

1. 进入 opensource/drivers/isp/tx-isp。

2. 修改 Makefile 中 TASSADAR_ENV_KERNEL_DIR。

3. 执行 make clean; make。

4. 生成并部署 tx-isp-PRJ008.ko。

常见加载参数:

insmod tx-isp-PRJ008.ko isp_clk=297000000 insmod tx-isp-PRJ008.ko isp_cache_line=1080 insmod tx-isp-PRJ008.ko direct_mode=1 insmod tx-isp-PRJ008.ko direct_mode=1 ivdc_mem_line=height/2 insmod tx-isp-PRJ008.ko direct_mode=2 ivdc_mem_stride=max_width

参数配置方法
isp_clkISP 工作频率
isp_cache_line多摄时必须配置,取多摄最大 Sensor 高度
direct_mode0 非直通;1~4 对应 1~4 路编码直通
ivdc_mem_line直通编码缓存的 DDR 行数
ivdc_threshold_line直通编码缓存阈值,默认半帧
ivdc_mem_stride多摄直通缓存宽度,需取最大分辨率宽度

Sensor 驱动编译依赖 Kernel 和 ISP 驱动,应先编译 Kernel/ISP,再修改 ISVP_ENV_KERNEL_DIR、ISP_DRIVER_DIR 并生成 sensor_

图像效果文件:

• 路径:/etc/sensor。

• 命名:

• 文件缺失会影响应用运行。

• 量产更新建议将 /etc/sensor 链接到可写分区。


Audio

T33 音频由内部 Codec、外部 Codec 和数字 DMIC 接口组成。BSP 指南明确说明:T33 不支持 DMIC,因此 dmic_enable 必须保持 0。

驱动位于 opensource/drivers/audio/oss3。加载参数:

参数配置
i2c_bus外部 Codec I2C 总线,默认 I2C1
excodec_name外部 Codec 的 I2C driver name
excodec_addr外部 Codec I2C 地址;默认 0xff 表示不使用
spk_gpio内部 Codec 功放 GPIO,默认 PB31
spk_level功放有效电平;-1 表示不由驱动控制
LEFT_MIC_GAIN0=0 dB、1=6 dB、2=20 dB、3=30 dB
gpio_func外部 Codec 所需 I2S 引脚复用
dmic_enableT33 必须为 0

示例:

insmod audio.ko i2c_bus=1 excodec_name=es8374 excodec_addr=0x17 insmod audio.ko spk_gpio=10 spk_level=1 insmod audio.ko LEFT_MIC_GAIN=3 gpio_func=2,1,0xFF0000

验证 Sample:

• sample-Ai:模拟 Mic 录音。

• sample-Ao:16 kHz 音频播放。

• sample-Ai-AEC:AEC 输入输出 PCM。

• sample-Ai-Ref:AEC 参考帧。

T33 使用模拟 Mic;sample-dmic 仅用于支持 DMIC 的平台。


GPIO

GPIO 分为 PA、PB、PC 三组,每组 32 位:

Group基地址
PA0x10010000
PB0x10011000
PC0x10012000

常用寄存器偏移:

寄存器偏移功能
PxINT0x10中断/功能控制
PxMSK0x20屏蔽/输出/输入和功能选择
PxPAT10x30功能/电平组合位
PxPAT00x40功能/电平组合位
PxPUEN0x110上拉
PxPDEN0x120下拉
PxDSL0x130低 16 位驱动能力
PxDSH0x140高 16 位驱动能力

INT=1、MSK=0 时可配置电平/边沿中断;INT=0、MSK=0 时可配置功能 0~3;INT=0、MSK=1 时可配置输出或输入。

配置入口:

• U-Boot:GPIO C 函数、U-Boot 命令、volatile 寄存器访问。

• Kernel:gpio_request/free、direction/value API,或直接访问寄存器。

• 文件系统:devmem 或 /sys/class/gpio。

• 应用层:sysutils GPIO API 或内存映射。

必须先确认 GPIO 没有被 I2C、Flash、SD、GMAC、UART 或已加载驱动占用。


图 10 GPIO 驱动能力配置 1


图 11 GPIO 驱动能力配置 2


UART

T33 支持 3 个 UART:

• UART0、UART3 支持硬件流控。

• 默认 Debug 为 UART1。

• Kernel 使用 Device Drivers → Serial drivers → ingenic jz47xx serial port support。

• 3.10 通过 menuconfig 配置通道、GPIO 和流控。

• 4.4/5.15 在 DTS 中将目标 UART 的 status 改为 okay,配置 pinctrl-0。

U-Boot Debug UART 由 include/configs/PRJ.h 的 CONFIG_SYS_UART_INDEX 指定;Kernel Debug UART 由 BOOTARGS_COMMON 中 console=ttySn 指定。

&uart1 { status = "okay"; pinctrl-names = "default"; pinctrl-0 =

UART1 支持 DMA 模式,可在 Kernel 中打开 enable uart1 dma mode。


Watchdog

Kernel 配置:

• 3.10:Device Drivers → Watchdog Timer Support → Ingenic jz SoC hardware watchdog

• 4.4/5.15:Device Drivers → Watchdog Timer Support → Ingenic ingenic SoC hardware watchdog

应用参考 samples/libsysutils-samples/sample-wdt.c。关闭 Watchdog 时必须先调用 wdt_disable(),再 close(),否则设备可能无法关闭。

ZERATUL 还支持 SOC 与 MCU 通信的 MCU_WDT,用于系统挂死和启动失败恢复。


ADC

T33 ADC:

• 基准电压 1.8 V。

• 支持 1 组 ADC。

• 3.10:使能 XBurst SADC core 和 XBurst SADC AUX。

• 4.4/5.15:使能 Ingenic PRJ00x SADC core/AUX,并在 DTS 设置 status="okay"。

Sample:

• samples/libsysutils-samples/sample_adc.c

• ADC_PATH 选择通道。

• STD_VAL_VOLATAGE 配置参考电压,单位 mV。

Tsensor:

• Device Drivers → Misc devices → JZ Tsensor Get Temperature

• 读取:cat /proc/jz/temp/temperature


PWM

T33 有 4 路 PWM。

Kernel 配置:

Device Drivers → Pulse-Width Modulation (PWM) Support → Ingenic PWM support → PWM channel0/1/2/3 Enable

每路可选择独立 GPIO。运行时:

echo 0 > /sys/class/pwm/pwmchip0/export echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable echo 10000 > /sys/class/pwm/pwmchip0/pwm0/period echo 5000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle

period 和 duty_cycle 单位为 ns。修改通道 GPIO 时同步修改 pwm-ingenic.c 的 pin 表、Kconfig 和 DTS/板级定义。


LCD

LCD/SLCD 驱动集成在 Kernel:

• 3.10:Graphics support → frame buffer → JZ LCDC framebuffer V1.4。

• 4.4/5.15:Graphics support → frame buffer → Ingenic Framebuffer Driver V14。

• 在 Supported lcd panels 选择对应屏。

板级适配:

• 确认 lcd-device_*.c 中 CS、背光、RESET GPIO。

• 确认 lcd-driver_*.c 中 SLCD 控制引脚复用。

• 确认时序、分辨率、像素格式和背光极性。


I2C

T33 支持 3 路硬件 I2C,也可配置 GPIO 模拟 I2C。

3.10:

• Device Drivers → I2C support。

• 选择 I2C 控制器。

• 模拟 I2C 使能 GPIO-based bitbanging I2C 和对应 soft I2C 配置。

• 在 board.h 中配置 CONFIG_SOFT_I2C*_GPIO。

4.4/5.15:

• 在 DTS 中将 I2C 节点设为 okay。

• pinctrl-0 选择引脚组。

• clock-frequency 配置速率。

• 模拟 I2C 添加 compatible = "i2c-gpio" 节点,并配置 SDA/SCL GPIO 和 i2c-gpio,delay-us。

&i2c0 { pinctrl-0 =

测试驱动参考 opensource/drivers/misc/sample_i2c/sample_eeprom/at24.c。

图 12 I2C 控制器配置


SD/eMMC

Kernel 配置:

Device Drivers → MMC/SD/SDIO card support → Ingenic XBurst SDHCI support → MSC for MMC0

MSC0 常用配置:

• GPIO 组按原理图选择。

• 最大时钟默认 25 MHz。

• 默认 4-bit;1-bit 模式只需 CLK、CMD、D0。

• 4.4/5.15 在 DTS 设置 bus-width、最大频率、时钟源和采样相位。

• MSC 引脚默认 4 mA,可根据波形调整为 2/4/8/12 mA。

• CMD/DATA 无外部上拉时必须配置软件上拉。

• 寄存器 0x10000068 的 bit15~16 为 TX 采样相位,bit17~19 为 RX 采样相位;常见 TX_SEL 135°、RX_SEL 0°。

文件系统:

• Kernel 默认支持 FAT32。

• 需要 Ext4 时打开 block layer large files 和 Ext4。

• ExFAT 可编译 opensource/drivers/misc/exfat-nofuse。

热插拔:

echo REMOVE > /sys/devices/platform/ahb0/13060000.msc/present echo INSERT > /sys/devices/platform/ahb0/13060000.msc/present

3.10 的 present 节点位于 jz-sdhci.0。mdev 自动挂载需要配置 /proc/sys/kernel/hotplug、mdev.conf 和插拔脚本。

SD 启动分区表位于 uboot/board/ingenic/PRJ/partitions.tab,分区大小需要 4 KB 对齐。

图 13 Kernel 3.10 MSC 时钟配置


图 14 Kernel 4.4/5.15 MSC 时钟配置


图 15 MSC 时钟源配置


SPI

Kernel 配置:

Device Drivers → SPI support

4.4/5.15 添加 spidev 节点:

spidev: spidev@0 { compatible = "ingenic,spidev"; reg =

以 SPI1 + PA 引脚为例,配置正确后出现 /dev/spidev1.0。Sample 位于 samples/libsysutils-samples/sample_spi,可用逻辑分析仪检查 CLK、MOSI、MISO 和 CS 波形。

图 16 Kernel 3.10 SPI 配置


图 17 Kernel 4.4/5.15 SPI 配置


图 18 SPI 波形验证


Motor

步进电机 Sample 使用 GPIO 和 TCU 定时器,支持两个电机。

已有驱动:

• sample_motor:无限位开关。

• sample_motor2:带限位开关。

• sample_motor3:带细分器。

• sample_motor4/5:SPI TMI8152/TMI8153。

• sample_motor_i2c:I2C MS32006。

• sample_motor_tmi8152c_i2c:I2C TMI8152C。

主要接口:

• MOTOR_RESET:初始化到坐标中心。

• MOTOR_MOVE:相对移动。

• MOTOR_GET_STATUS:绝对坐标和状态。

• MOTOR_SPEED:常用 400~500,范围 100~900。

• MOTOR_GOBACK:返回中心。

• MOTOR_STOP。

• MOTOR_CRUIS。

在 motor.h 按原理图修改 A/B/C/D 相 GPIO。外部晶振缺失时可使用 TCU 输出时钟,必须检查与 PWM 的 TCU 通道冲突。


GMAC

T33 提供一个 Ethernet MAC:

• RMII。

• 10/100 Mbit/s。

• 全双工/半双工。

Kernel 配置:

Network device support → Ethernet driver support → ingenic on-chip MAC support → Ingenic mac dma interfaces

默认 PHY 驱动包括 JLSemi、Motorcomm 和 ICPlus。已有适配型号包括 RTL8201F、IP101GR、JL1101、YT8512、RPC8201F、SZ18201 和 SCCK9007HII100。

4.4/5.15 在 DTS 配置:

&mac0 { ingenic,phy-clk-freq =

IPv6 需要打开 IPv6 协议,并使用 ip -6 addr、ping -6 验证。


WIFI

USB Wi-Fi:

• DWC2 设置为 Host Only。

• 使能 Host-side USB。

• 上电后用 lsusb 检查枚举。

SDIO Wi-Fi:

• MSC0 一般保留给 SD 卡,MSC1 常用于 SDIO Wi-Fi。

• 使能 MSC for MMC1。

• 根据硬件选择 PB 或 PC 引脚组。

• 4.4/5.15 DTS 设置 status="okay"、ingenic,sdio_clk=

驱动移植以 RTL8189FTV 为例:

1. Makefile 增加 PLATFORM_INGENIC。

2. 选择 SDIO 支持。

3. 增加 platform_ingenic_sdio.c。

4. 实现主动探测/移除 jzmmc_manual_detect()。

5. 配置 Wi-Fi 电源 GPIO。

6. 生成 8189fs.ko。

7. 分别验证 STA 和 AP。

STA 模式使用 wpa_supplicant 和 wpa_supplicant.conf;AP 模式使用 hostapd/dnsmasq 或 SDK 提供的脚本。

图 19 Wi-Fi MSC1 设备树配置


图 20 SDIO Wi-Fi 平台选择


图 21 SDIO Wi-Fi IO 和电源配置


图 22 STA 模式网络验证


USB

USB 模式:

模式Kernel 配置
Device OnlyDWC2 Device Only + USB Gadget
Host OnlyHost-side USB + DWC2 Host Only
Both同时启用 Host/Device,使用 ID PIN 或寄存器切换

Host 外设配置:

• U 盘:SCSI support、SCSI disk、USB Mass Storage。

• USB 串口:USB Modem CDC ACM、USB Serial、对应芯片驱动。

• USB 硬盘:SCSI、USB Mass Storage、large block devices。

• USB 网卡:USB Network Adapters、对应 ASIX 等驱动。

• USB HID:HID bus、USB HID、mouse/input。

Device Gadget:

• 4.4.94 推荐使用 configfs 在用户空间配置。

• 常见功能包括 RNDIS、CDC Ethernet、Mass Storage 和串口。

Both 模式可由 ID PIN 自动切换,也可在软件中设置寄存器,但应避免 USB role 与 VBUS 管脚冲突。

图 23 USB OTG 设备树配置


图 24 RNDIS 驱动未安装状态


图 25 RNDIS Carrier 出流验证


4G

支持三种接入:

模式配置
PPP修改 USB serial option/QMI 代码、网络与 USB 配置,准备 /etc/ppp 脚本
GobNet编译 GobiNet,避免 qmi_wwan/qcserial 重复占用设备
WWAN启用 QMI WWAN、USB Network Adapters,执行 quectel-CM

PPP 验证:

1. 插入模组并检查 /dev/ttyUSB*。

2. 使用 AT 命令确认模组通信。

3. 执行 pppd call quectel-ppp &。

4. 检查 /etc/resolv.conf。

5. 使用 ping 和实际业务数据验证。

GobNet/WWAN 烧录后通常执行 quectel-CM &。休眠唤醒产品还需验证模组重新枚举、拨号恢复和 DNS。

图 26 4G PPP 调试文件配置


图 27 4G 网络配置

图 28 4G 模组 AT 通信验证


图 29 4G PPP 拨号成功


SFC

SFC 管理 SPI NOR/NAND,需同时适配 U-Boot 和 Kernel。

4.4/5.15 支持 U-Boot-2013 和 U-Boot-2022:

• U-Boot-2013 在 drivers/mtd/spi/spi_flash.c 或老 NAND 目录中添加厂商和器件表。

• U-Boot-2022 使用模块化 SPI NOR/NAND 驱动。

• NOR 配置 JEDEC ID、sector、容量、地址字节和 Quad 命令。

• NAND 配置厂商/设备 ID、page/OOB/block、ECC、plane、CS 时序和四线模式。

• Kernel 配置 drivers/mtd/devices/ingenic_sfc_v2 对应器件。

单线/四线:

• U-Boot 默认单线,CONFIG_SPI_QUAD 控制四线。

• Kernel:Device Drivers → MTD → Ingenic series SFC driver v2 → sfc Mode。

CONFIG_SPI_STARDARD=y # CONFIG_SPI_QUAD is not set

四线:

# CONFIG_SPI_STARDARD is not set CONFIG_SPI_QUAD=y

Kernel 编译时使用 PRJ008_goat_defconfig 选择 NOR 支持,或使用 SDK 对应 NAND defconfig;新增 U-Boot 2022.10 器件时必须同步 Kconfig、Makefile、器件 ID 和厂商注册表。

图 30 SPI NOR 厂商 ID


图 31 SPI NOR 参数表


图 32 Kernel SPI NOR/NAND 配置

图 33 NAND 设备参数与 plane 配置;Word 原始图片。

图 34 NAND CS 时序


图 35 NAND 初始化信息


图 36 SFC Makefile 配置