AM4377通过 spi0访问闪存 IS25LP256D、命令行执行 SF 读取80000000 100000 700000
将7MB 封装读至存储器地址0x8000000需要120秒、测量 SPI 的时钟和数据线、时钟为48M、
但一次只传输1B、每个 B 之间有15us 的间隔
如何提高读取速度、或者如何持续输出 SPI 时钟?
此外、测量内存时钟频率为100M。 DDR MT41K256M16为1866M。 应如何设置 DDR 的输入时钟?
是否设置为0x5AC[18:8]? 但现在设置为50|2或400|23、实际测量 DDR 输入侧仍然是100M 时钟、
该寄存器已成功设置、M2为2分频。 设置值为
const 结构 DPLL_params DPLL_DDR ={400、23、1、-1、1、 -1、-1};或{50、2、1、 -1、2、-1、-1};
[代码路径]:ti_uboot_201605sdk3205\drivers\SPI
static int omap3_spi_read (struct omap3_spi_priv* privt、unsigned int len、
void * RXP、unsigned long 标志)
{
int i、chconf;
超长启动;
int cnt;//CRSC 调试
/*SF:RD 0x80000000、L73650032 (W8)、0x4803012c、4803013c;*/
printf ("SF:RD 0x%x、L%d (w%d)、0x%x、%x;\n"、RXP、len、priv->wordlen、
&priv->regs->channel[priv->cs].chconf、&priv->regs->channel[priv->cs].rx);//crSC 调试
chconf = readl (&priv->regs->channel[priv->cs].chconf);
/*启用通道*/
OMAP3_SPI_SET_ENABLE (priv, OMAP3_MCSPI_CHCTRL_EN);
chconf &=~(OMAP3_MCSPI_CHCONF_TRM_MASK | OMAP3_MCSPI_CHCONF_WL_MASK);
chconf |=(criv->wordlen-1)<<7;
chconf |= OMAP3_MCSPI_CHCONF_TRM_RX_ONLY;
chconf |= OMAP3_MCSPI_CHCONF_FORCE;
OMAP3_SPI_WRITE_chconf (priv, chconf);
writel(0),&priv->regs->channel[priv->cs].tx);
对于(i = 0;i < len;i++){
START = GET_TIMER (0);
CNT = 0;
/*等待 RX 寄存器包含数据(RX = 1)*/
while (!(readl (&priv->regs->ch[priv->cs].chstat)&
OMAP3_MCSPI_CHSTAT_Rxs){
if (get_timer (start)> SPI_WAIT_TIMEOUT){
printf ("SPI RX 超时、STATUS=0x%08x\n"、
readl(&priv->regs->channel[priv->cs].chstat));
返回-1;
}
CNT++;
}
如果((i%0x80000)==0)
printf ("%d;"、cnt);//CRSC 调试
/*禁用频道以防止收到 furher */
如果(i =(len - 1))
OMAP3_SPI_SET_ENABLE (priv, OMAP3_MCSPI_CHCTRL_DIS);
/*读取数据*/
unsigned int *rx =&priv->regs->channel[priv->cs].rx;
如果(priv->wordlen >16)
(((u32 *) RXP)[i]= readl (Rx);
否则(priv->wordlen >8)
(((U16 *) RXP)[i]=(U16) readl (Rx);
其他
(((u8 *) RXP)[i]=(u8) readl (Rx);
}
if (flags & SPI_Xfer_end){
chconf &=~OMAP3_MCSPI_CHCONF_FORCE;
OMAP3_SPI_WRITE_chconf (priv, chconf);
}
返回0;
}
[uBoot info]:
OMAP3 SPI 速度48000000Hz;
SF:RD 0x9ef16f98、L5 (W8)、0x4803012c、4803013c;
0;SF:9d 闪存不支持锁定操作
SF:RD 0x9ef16f97、L1 (W8)、0x4803012c、4803013c;
0;SF:检测到页大小为256字节的 IS25LP256D、擦除大小为64 KiB、总共32 MIB
:返回0
器件0偏移量0x100000、大小0x700000
SF:RD 0x8000000000、L7340032 (W8)、0x4803012c、4803013c;
0;0;0;0;0;0;0;...
BOOT># MD 0x48030100
48030100:0000002b 00000000 00000000 00000000 +..........
48030110:00000015 00000001 00000000 00000000…
48030120:00000001 00000000 00000004 00060000…
48030130:00000000 00000000 00000000 00000000…
48030140:00060000 00000000 00000000 00000000…
48030150:00000000 00060000 00000000 00000000…
48030160:00000000 00000000 00060000 00000000…
DDR 时钟:
CRSC># MD 0x44DF2D20
44df2d20:00000007 00000001 00000000 0003e817…
44df2d30:00000000 0000022a 00000228… *。。(。
44df2d40:00000024 00000000 00000000 00000000 $..........
44df2d50:00000000 00000000 00000000 00000000…
44df2d60:00000007 00000001 00000000 00025817… 十.
44df2d70:00000201 00000000 00000000 00000000…
44df2d80:00000000 00000000 00000000 00000000…
44df2d90:00000000 00000000 00000000 00000000…
44df2da0:00000007 00000001 00000000 00019017…
44df2db0:00000221 00000000 00000221 00000000!… !…
44df2dc0:00000000 00000000 00000000 00000000…
44df2dd0:00000000 00000000 00000000…
44df2de0:00000007 00000001 00000000 0403c017…
44df2df0:00000285 00000000 00000000 00000000…
44df2e00:00000000 00000000 00000000 00000000…
44df2e10:00000000 00000300 00000000 00000000…
谢谢!
