Other Parts Discussed in Thread: AM623
器件型号: AM623
TI E2E 社区:您好、
我们使用 AM623 (Verdin AM62 SoM) 上的 OSPI 控制器、通过四通道 SPI 接口(非 NOR 闪存用例)与定制 FPGA 进行通信。 我们实施了裸机 Linux 内核驱动程序、可绕过spi-cadence-quadspi框架直接对 Cadence QSPI 寄存器进行编程。
关于控制器行为、我们有两个问题。
系统设置程序
- 平台: AM623、Linux 6.12、Verdin AM62 SoM
- SPI 模式: 四通道 (4-4-4)、SDR、模式 0 (CPOL=0、CPHA=0)
- 时钟: ref_clk = 167MHz、baud_div = 3→~导线上的 21MHz (SPI 时钟:ref_clk /(2*(div+1)))
- PHY: 已禁用(SDR 必需)
- DAC: 禁用
- 传输模式:
- STIG(≤8 字节)
- 间接(PIO,基于轮询)
FPGA SPI 协议
FPGA 需要以下帧格式:
- 写入:
CMD (1B) + ADDR (3B) + COUNT (1B) + DATA (N bytes) + DUMMY (1B) - 读取:
CMD (1B) + ADDR (3B) + COUNT (1B) + DUMMY (10 clocks) + DATA (N bytes)
其他详细信息:
- CMD 字节在低位中对操作码(读取= 0x00、写入= 0x80)和字宽 (1/2/4) 进行编码
- ADDR 为 3 个字节(从器件 ID +寄存器地址)
- count 是 1 个字节、表示字数 (
data_bytes / word_width) - 所有相位在四通道模式(4 位)下传输
由于 Cadence OSPI 控制器本身不支持 计数字段 、我们目前使用 4 字节地址模式将计数字节打包成第 4 个地址字节。 此方法有效:FPGA 会将最后一个地址字节正确解释为计数。 STIG 模式使用自己的地址配置(寄存器)CMDCTRL、因此两种模式可以共存。
问题 1:支持写入的模式字节
我们希望通过发送 count 字节 模式字节阶段 而不是将其嵌入地址字段中。
Cadence IP 提供:
MODE_BIT_CONFIG_REG (0x28)→μMODE_FLD [7:0]s(模式字节值)DEV_INSTR_RD_CONFIG_REG (0x04)→位 20 (MODE_BIT_ENABLE)、用于读取操作
但是、我们无法MODE_BIT_ENABLE在中找到等效位:
DEV_INSTR_WR_CONFIG_REG (0x08)
问题:
- 是否可以为启用模式字节传输 间接写入操作 ?
- 或者、模式字节特性是否严格限制为读取?
- 如果是、是否有任何替代机制可在间接写入期间在地址阶段和数据阶段之间插入一个额外的字节?
问题 2:禁用页面边界 Re 寻址
由于计数会编码到最低地址字节中、因此控制器会解释大地址值。
我们配置了:
BYTES_PER_DEVICE_PAGE(inDEV_SIZE_CONFIG_REG (0x14))=0x800(2048 字节、最大有效功率为 2)
问题:
控制器会强制执行页边界逻辑、并在越过边界时拆分传输。 这会导致:
- CS 置为无效并重新发出命令
- 协议损坏、原因是:
- 新地址不再包含有效的计数字段
- FPGA 会将新命令解释为单独的事务
示例:
COUNT = 0xFF
Addr_encode = 0x150007FF
PAGE_OFFSET = 0x150007FF % 0x800 = 0x7FF (2047)
Bytes_to_boundary = 2048 - 2047 = 1 个字节
→1 个字节之后的分页符
问题:
- 是否有办法可以完全禁用 OSPI 控制器中的页边界处理?
- 以下任何方法是否有效?
- 设置
BYTES_PER_DEVICE_PAGE为 0 或0xFFF(不起作用) - 一个配置位、用于禁用页面边界上的自动 CS 切换
- 的替代用法、
DEV_SIZE_CONFIG适用于非闪存器件
- 设置
我们观察到:
0xFFF(非 2 的幂)会导致传输损坏0也会导致问题
希望就这两个专题提供任何指导。
谢谢您、
FIDE
