现在需要在BBB的基础上增加SRAM来存储一些重要的数据,想把SRAM接在GPMC上,datasheet说是可以接的,但是看u-boot的源代码,没有看到SRAM相关的部分。如果要支持SRAM,软件需要做哪些设定?另外SRAM会采用电池单独供电,是否可行?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
现在需要在BBB的基础上增加SRAM来存储一些重要的数据,想把SRAM接在GPMC上,datasheet说是可以接的,但是看u-boot的源代码,没有看到SRAM相关的部分。如果要支持SRAM,软件需要做哪些设定?另外SRAM会采用电池单独供电,是否可行?
SRAM 例子:https://e2e.ti.com/support/arm/sitara_arm/f/791/t/315716 希望可以帮到你!
pinmux只是引脚功能定义
还需要配置gpmc的相关控制寄存器
我这里有个关于地址区域划分的介绍:http://www.deyisupport.com/files/m/sitara_arm/11905.aspx
对于时序配置,还是要根据你的sram的需求来。
另外,针对于你说的这个问题,不会有影响。你只是需要低512K的数据空间,对应到自己的sram就可以了。
Steven:
谢谢你的信息。还有2个问题请教一下
1.对于每次一读写都需要2个片选的SRAM是否就没有办法支持?(比如 AS6C1616。 一个低,一个高)
2.如果接16BIT不复用的SRAM (比如AS6C1616),是不是地址要从A1开始(AM335x ARM® Cortex™-A8 Microprocessors Reference_Manual_1.pdf 中讲A0 not use)?
https://e2e.ti.com/support/arm/sitara_arm/f/791/t/251339
A0是被跳过了,在16 bit里
一般带2个CS的SRAM,在Linux下可以映射成两个不同的设备。
目前这颗SRAM我datasheet不能映射成2段来用,因为他每一次读写都需要用到2个CS,1高1低。
另外请教下,需要从/proc/iomem中看到映射的部分,是不是只需要devicetree配置正确即可?无关hardware?
因为我的板子sram还没有接线好,我想先在BBB上看看。目前我在u-boot和dts中都配置了pinmux和register,
但是从/proc/iomem中只能看到gpmc@500000000,看不到我映射的sram 0x10000000的部分,cs选的0。
从/proc/iomem中只能看到gpmc@500000000,看不到我映射的sram 0x10000000的部分,换成CSN1也还是看不到。请专家指点。
device tree只是板级接口部分,驱动也要实现正确映射才能在Proc里看到。
另外如果要求2个CS一高一低,可以同过外部电路实现。
在GPMC的driver中,对于每个片选,他只是request_resource,没有做devm_request_mem_region,是不是把这里改成request region就能在/proc/iomem中看到呢?
static int gpmc_cs_insert_mem(int cs, unsigned long base, unsigned long size)
{
struct resource *res = &gpmc_cs_mem[cs];
int r;
size = gpmc_mem_align(size);
spin_lock(&gpmc_mem_lock);
res->start = base;
res->end = base + size - 1;
r = request_resource(&gpmc_mem_root, res);
spin_unlock(&gpmc_mem_lock);
return r;
}
Dear TI members:
我们基于BBB的板子已经生产出来了,配置如下
1.sram是1024K x 16 bit, 地址线从a1接到a19.(只用了1M)
2. gpmc映射的地址是0x10000000,大小是16M3.片选csn1
在验证sram时发现2个问题
1.从 /dev/mem映射出来的地址空间,可以访问到1M之外的区域,比如说1M+x,但是实际对应的SRAM空间和基地址+x一样.这样正常么?
比如0地址和1M的地址一样.
2.往sram byte0地址去写数据,但是读出来byte0、8的数据相同,同样,往byte8写数据,从byte0和byte8可以独到刚写入的数据,
byte1-byte8....byte16-byte24都一样,也就是说,读写的时候0-7和8-15地址一一对应。16-23和24-31.....一路下去都重叠了....
不知道这种现象是否是gpmc的设定错误所导致?
比如我要从0地址一直写到15.当写完前8个byte时,如下:
11 22 33 44 55 66 77 88 11 22 33 44 55 66 77 88
写地9个byte时如下
99 22 33 44 55 66 77 88 99 22 33 44 55 66 77 88
写第10个byte
99 aa 33 44 55 66 77 88 99 aa 33 44 55 66 77 88
如果正常的话,期望的是
11 22 33 44 55 66 77 88 99 aa ...............................