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. 【LEETCODE】51、数组分类,简单级别,题目:581,830,1010,665

    package y2019.Algorithm.array; /** * @ClassName FindUnsortedSubarray * @Description TODO 581. Shorte ...

  2. 有助于改善性能的Java代码技巧

    前言 程序的性能受到代码质量的直接影响.这次主要介绍一些代码编写的小技巧和惯例.虽然看起来有些是微不足道的编程技巧,却可能为系统性能带来成倍的提升,因此还是值得关注的. 慎用异常 在Java开发中,经 ...

  3. 【转载】Extjs设置Ajax请求的超时时间timeout

    在Extjs中的Ajax请求中,Ext.Ajax.request 默认超时时间是30秒,有时候我们有比较耗时的操作需要设置更长时间,此时我们就需要修改Ext.Ajax.Requset的超时时间为更长, ...

  4. linux 下 shell脚本报错:-bash: ./build.sh: /bin/sh^M: bad interpreter: No such file or directory

    主要原因是build.sh是在windows下编辑然后上传到linux系统里执行的..sh文件的格式为dos格式.而linux只能执行格式为unix格式的脚本. 我们可以通过vi编辑器来查看文件的fo ...

  5. Kconfig和Makefile

    内核源码树的目录下都有Kconfig和Makefile.在内核配置make menuconfig时,从Kconfig中读出菜单,用户勾选后保存到.config中.在内核编译时,Makefile调用这个 ...

  6. java git .gitignore常用规则

    # Created by .ignore support plugin (hsz.mobi).gitignore # Operating System Files *.DS_Store Thumbs. ...

  7. MySQL Hardware--FIO压测

    FIO参数 .txt 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdb direct= 测试过程绕过机器自带的buffer,使测试结果更真实 rw= ...

  8. mysql学习之基础篇04

    五种基本子句查询 查询是mysql中最重要的一环,我们今天就来说一下select的五种子句中的where条件查询: 首先我们先建立一张商品表:goods 由于商品数目太多,我就不一一列举了. 在这里我 ...

  9. 【HICP Gauss】数据库 环境的搭建 -1

    1.安装规则    1.主机名必须网络唯一  2.主机名必须两位数以上 可以中划线 不能下划线  3.固定IP地址  4.端口号 1888 新增账户 omm 用户组 dbgrp ,家目录 /home/ ...

  10. 批处理引擎MapReduce编程模型

    批处理引擎MapReduce编程模型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MapReduce是一个经典的分布式批处理计算引擎,被广泛应用于搜索引擎索引构建,大规模数据处理 ...