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. Linux的软连接、硬链接和find命令

    软链接和硬链接 序号 命令 作用 01 ln –s 被链接的源文件 链接文件 建立文件的软连接,用通俗的是方式类似于Windows下的快捷链接 源文件连接要是有绝对路径,不能使用相对路径,这样可以方便 ...

  2. node-red 流程的导入导出

    流程的导入导出 流程的导出 选中所要导出的流程,点击右上角三条杠按钮 有两个选项,导出到剪贴板和库 1. 导出到剪贴板 导出到剪贴板可以复制,粘贴到任何地方 [{,,,,,,"wires&q ...

  3. Asp.Net进阶/值类型与引用类型:复习

    什么是值类型? 值类型: 就是非类类型,委托类型,接口类型,string类型的类型称为值类型. 引用类型类型:就是类类型,委托类型,接口类型,string类型称为引用类型. 值类型与引用类型的赋值问题 ...

  4. 未检测到.NET CORE SDK 或者 新建项目没有.NET CORE 3.0选择项

    终于解决了 首先先看自己的VS2019版本 由于楼主下载的 .NET CORE SDK 3.0.100-preview8-013656 焕然大悟 原来是版本不符合,需要用vs 2019 preview ...

  5. bootstrap 模态

    <script type="text/javascript" src="js/jquery-ui-custom.min.js"></scrip ...

  6. power shell导出文件夹目录递归

    --获取目录:Get-ChildItem --递归目录:-Recurse --选择想要导出的目录参数,如:文件名,时间,权限等:Select-Object Name, LastWriteTime, M ...

  7. 将ftp目录映射为本地盘符

    1.ftpuser 下载安装FTPUSE下载地址:http://www.ferrobackup.com/ftpuse/ 创建  FTPUSE F: www.xx.com pwd  /USER:admi ...

  8. ISM无需授权使用的无线频率

  9. Mongodb设置用户权限(整理版)

    本文是基于windows 下 MongoDB 4.0编写,据了解MongoDB在3.0以后的版本中权限设置有变化. 1. 创建超级用户 安装完之后,打开命令行,进入mongodb安装目录,在bin目录 ...

  10. Redis面试基本问题

    Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet.如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog.Ge ...