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。
| Kernel | 配置方式 |
| 3.10.14 | make menuconfig、板级 board.h、平台 C 代码 |
| 4.4.94 | make menuconfig、arch/mips/boot/dts/ingenic/*.dts/*.dtsi |
| 5.15.170 | make 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_clk | ISP 工作频率 |
| isp_cache_line | 多摄时必须配置,取多摄最大 Sensor 高度 |
| direct_mode | 0 非直通;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_GAIN | 0=0 dB、1=6 dB、2=20 dB、3=30 dB |
| gpio_func | 外部 Codec 所需 I2S 引脚复用 |
| dmic_enable | T33 必须为 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 | 基地址 |
| PA | 0x10010000 |
| PB | 0x10011000 |
| PC | 0x10012000 |
常用寄存器偏移:
| 寄存器 | 偏移 | 功能 |
| PxINT | 0x10 | 中断/功能控制 |
| PxMSK | 0x20 | 屏蔽/输出/输入和功能选择 |
| PxPAT1 | 0x30 | 功能/电平组合位 |
| PxPAT0 | 0x40 | 功能/电平组合位 |
| PxPUEN | 0x110 | 上拉 |
| PxPDEN | 0x120 | 下拉 |
| PxDSL | 0x130 | 低 16 位驱动能力 |
| PxDSH | 0x140 | 高 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 Only | DWC2 Device Only + USB Gadget |
| Host Only | Host-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 配置