1      Scope of Document

This document describes SPI F-RAM hardware design

2      Requiremen

2.1     Function Requirement

support spi f-ram fm25l16b in linux

2.2     Performance Requirement

NA

3      Hardware Overview

standard spi interface, four line cs sck mosi miso;

4      Functional Description

4.1     Functional Block Diagram

4.2     SPI F-RAM

4.2.1 Overview

advantage:

1) High-endurance 100 trillion (1014) read/writes.

2) Very fast serial peripheral interface

5      Porting

5.1     3.2.0 Kernel porting

Device Drivers  --->

[*] Misc devices  --->

EEPROM support  --->

<*> SPI EEPROMs from most vendors

Register platform source:

static struct spi_eeprom fram = {

.byte_len  = SZ_16K / 8,

.name      = "fm25l16b",

.page_size = 256,

.flags     = EE_ADDR2,

};

static struct spi_board_info am335x_spi0_slave_info[] = {

{

.modalias       = "at25",

.platform_data   = &fram,

.max_speed_hz  = 2 * 1000 * 1000,

.bus_num       = 1,

.chip_select     = 0,

.irq             = -1,

.mode          = SPI_MODE_0,

},

};

/* setup spi0 */

static void spi0_init(int evm_id, int profile)

{

setup_pin_mux(spi0_pin_mux);

spi_register_board_info(am335x_spi0_slave_info,

ARRAY_SIZE(am335x_spi0_slave_info));

return;

}

Kernel log:

at25_proble

at25 spi1.0: 2 KByte fm25l16b eeprom, pagesize 256

Device access interface:

/sys/bus/spi/devices/spi1.0/eeprom

5.2     4.14.40 Kernel porting

Add in kernel configure option

Device Drivers  --->

[*] Misc devices  --->

EEPROM support  --->

<*> SPI EEPROMs from most vendors

Change the dts file for support F-RAM

spi0_pins: pinmux_spi0 {

pinctrl-single,pins = <

AM33XX_IOPAD(0x950, PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_sclk.spi0_sclk */

AM33XX_IOPAD(0x95C, PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_cs0.spi0_cs0 */

AM33XX_IOPAD(0x954, PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_d0.spi0_d0 */

AM33XX_IOPAD(0x958, PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_d1.spi0_d1 */

>;

};

};

&spi0 {

status = "okay";

pinctrl-names = "default";

pinctrl-0 = <&spi0_pins>;

fram@0 {

reg = <0x0>;

compatible = "atmel,at25", "cypress,fm25l16b";

spi-max-frequency = <2000000>;

pagesize = <256>;

size = <2048>;

address-width = <16>;

};

};

Kernel log:

[    1.107399] at25 spi0.0: 2 KByte at25 eeprom, pagesize 256

Device access interface:

/sys/bus/nvmem/devices/spi0.00/nvmem

Note: in kernel 4.14.40 spi eeprom driver was register under nvmem framwork, so the device access interface different from 3.2.0 device interface.

6      Test Method

read/write test code in 3.2.0

int main ( int argc, char** argv )

{

int ret, fd, i, j;

char read_data[256];

char write_data[256];

char offset;

fd = open ( "/sys/bus/spi/devices/spi1.0/eeprom", O_RDWR );

if ( fd < 0 ) {

perror ( "Open at24c08 fail\n" );

return -1;

}

for ( i = 0; i < 256; i++ )

write_data[i] = i;

lseek ( fd, 0 , SEEK_SET );

ret = write ( fd, write_data, 256 );

if ( ret < 0 ) {

printf ( "Write error\n" );

return -1;

}

lseek ( fd, 0 , SEEK_SET );

ret = read ( fd, read_data, 256 );

if ( ret < 0 ) {

printf ( "Read error\n" );

return -1;

} else if ( ret < 256 ) {

perror ( "Incomplete read\n" );

printf ( "%d\n", ret );

return -1;

}

for ( i = 0; i < 256; i++ ) {

if ( i % 16 == 0 )

printf ( "\n" );

printf ( " %03d ", read_data[i] );

}

printf ( "\n" );

}

Using hexdump tool, read spi f-ram data

# hexdump -C  /sys/bus/spi/devices/spi1.0/eeprom

00000000  08 74 65 73 74 5f 70 70  70 00 00 00 00 00 00 00  |.test_ppp.......|

00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

*

00000800

read/write test methon in 4.14.40

root@IoTP:/sys/bus/nvmem/devices/spi0.00# echo "./test_123"  >  nvmem

root@IoTP:/sys/bus/nvmem/devices/spi0.00# hexdump -C nvmem

00000000  2e 2f 74 65 73 74 5f 31  32 33 0a 00 00 00 00 00  |./test_123......|

00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

*

00000800

am335x system upgrade kernel f-ram fm25l16b(十六)的更多相关文章

  1. am335x system upgrade kernel usb stroage(十)

    1      Scope of Document This document describes USB hardware design, support stardard usb2.0 port o ...

  2. am335x system upgrade kernel emmc(十八)

    1      Scope of Document This document describes EMMC hardware design 2      Requiremen 2.1     Func ...

  3. am335x system upgrade kernel tf(五)

    1      Scope of Document This document describes TF hardware design 2      Requiremen 2.1     Functi ...

  4. am335x system upgrade kernel ethernet(四)

    1      Scope of Document This document describes ethernet hardware design and porting KZS8081 to ubo ...

  5. am335x system upgrade kernel gpio(九)

    1      Hardware Overview gpio interface,pin map: AM335X_I2C0_W_C----------------------MCASP0_AXR1 /* ...

  6. am335x system upgrade kernel can(八)

    1      Scope of Document This document describes can bus hardware design and can bus driver developm ...

  7. am335x system upgrade kernel uart(七)

    1      Scope of Document This document describes UART hardware design, uart driver porting 2      Re ...

  8. am335x system upgrade kernel i2c rtc eeprom(六)

    1      Scope of Document This document describes i2c bus hardware design and support i2c-devices: ee ...

  9. am335x system upgrade kernel ec20 simcom7600ce(十一)

    1      Scope of Document This document describes 4G hardware design, support quectel ec20 4G module/ ...

随机推荐

  1. kubernetes 实践二:kubectl命令使用

    这里记录kubernetes学习和使用过程中的内容. CentOS7 k8s-1.13 flanneld-0.10 docker-18.06 etcd-3.3 kubectl用法概述 kubectl是 ...

  2. SpringCloud之Ribbon负载均衡及Feign消费者调用服务

    目的: 微服务调用Ribbon Ribbon负载均衡 Feign简介及应用 微服务调用Ribbon Ribbon简介 1. 负载均衡框架,支持可插拔式的负载均衡规则 2. 支持多种协议,如HTTP.U ...

  3. mysql数据库备份之主从同步配置

    主从同步意义? 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave).因为复制是异步进行的,所以从服务 ...

  4. 把时间戳转换为 datatime 格式

    使用time timeStamp = 1381419600 timeArray = time.localtime(timeStamp) otherStyleTime = time.strftime(& ...

  5. centos下安装nginx(转载)

    http://blog.csdn.net/u010246789/article/details/51501710 有声明,不能转载,所以,就把地址弄了过来

  6. Linux 内核/驱动开发总结

    总体来看,需要一个阶段性总结了,因为现在SD卡的调试也进入了卡壳期.大概会出一系列的总结文章,主要涉及的主题在下面列出: 1.开发工具:gcc/gdb/vim/ctags 2.Makefile和KCo ...

  7. AOP初识

    AOP是Aspect Oriented Programing的简称,面向切面编程.AOP适合于那些具有横切逻辑的应用:如性能监测,访问控制,事务管理.缓存.对象池管理以及日志记录.AOP将这些分散在各 ...

  8. Linux记录history命令

    对后面的(1)方法的提取文件改写法(强烈推荐) 记录存储位置: mkdir -p /usr/local/records chmod 777 /usr/local/records/chmod +t /u ...

  9. MySQL Innodb--共享临时表空间和临时文件

    在MySQL 5.7版本中引入Online DDL特性和共享临时表空间特性,临时数据主要存放形式为: 1.DML命令执行过程中文件排序(file sore)操作生成的临时文件,存储目录由参数tmpdi ...

  10. Spring Boot 笔记 (1) - Maven、基本配置、Profile的使用

    一. Spring Boot 简介 开箱即用的一站式 Java EE 解决方案 Spring 技术栈的大整合 核心问题 暂时无法回答 Spring Boot 和 SOA 有什么区别? Spring B ...