2012-02-06 93 views
4

我想从闪存复制数据到RAM。 那么我如何设置DMA控制器中RAM的目标内存地址,以便它可以使用它的通道将数据从源地址(在闪存中)复制到RAM存储器中。如何通过DMA控制器访问RAM存储器?

我在x86 arch上做,它是8237 DMA。

+0

这是什么类型的设备?这是一个USB或SATA闪存? – 2012-02-06 09:21:44

+0

这是内核操作系统,应该照顾管理...除非没有内核。 – m0skit0 2012-02-06 09:26:07

+0

David:Ita SDD闪存从我必须复制数据(内核映像)并将其放入RAM中。 我已经阅读了一些tutoials,但很抱歉得到了很多信息如何做mem-to-mem复制(尤其是设置目标地址) m0skit0 - 我正在通过bootloader进行这项操作,目前没有内核,因为bootloader本身就是将内核映像从闪存复制到RAM中 – user1083212 2012-02-06 10:01:48

回答

1

8237 DMA控制器能够进行从RAM到RAM,从I/O到RAM,从RAM到I/O设备的传输。

您必须考虑到您将只能复制最多64KB的数据。如果您想复制超过64KB,则需要多次传输操作。

假设你使用的是一台IBM PC有相同的环境,你可以设置在单独的锁目标内存段地址,你将需要:

  1. 规范化目的地地址段:偏移,使得偏移量为大于16 正常化进行这种方式下(DIV是整数除法,MOD是弹性模量):

    normalized_segment = segment + offset DIV 16

    normalized_offset = offset MOD 16

  2. 装载段值进入高位锁存器属于您要使用的信道(页面地址寄存器)

  3. 负载偏移地址为起始地址要与DMA通道的注册使用。
  4. 继续使用DMA设置(传输长度,模式,EOC中断等)