am335x system upgrade kernel f-ram fm25l16b(十六)
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(十六)的更多相关文章
- am335x system upgrade kernel usb stroage(十)
1 Scope of Document This document describes USB hardware design, support stardard usb2.0 port o ...
- am335x system upgrade kernel emmc(十八)
1 Scope of Document This document describes EMMC hardware design 2 Requiremen 2.1 Func ...
- am335x system upgrade kernel tf(五)
1 Scope of Document This document describes TF hardware design 2 Requiremen 2.1 Functi ...
- am335x system upgrade kernel ethernet(四)
1 Scope of Document This document describes ethernet hardware design and porting KZS8081 to ubo ...
- am335x system upgrade kernel gpio(九)
1 Hardware Overview gpio interface,pin map: AM335X_I2C0_W_C----------------------MCASP0_AXR1 /* ...
- am335x system upgrade kernel can(八)
1 Scope of Document This document describes can bus hardware design and can bus driver developm ...
- am335x system upgrade kernel uart(七)
1 Scope of Document This document describes UART hardware design, uart driver porting 2 Re ...
- am335x system upgrade kernel i2c rtc eeprom(六)
1 Scope of Document This document describes i2c bus hardware design and support i2c-devices: ee ...
- am335x system upgrade kernel ec20 simcom7600ce(十一)
1 Scope of Document This document describes 4G hardware design, support quectel ec20 4G module/ ...
随机推荐
- 【flask】登陆后返回之前重定向跳转的页面
登陆后返回之前重定向跳转的页面 一.前言 实现强制跳转到登陆页面,登陆后返回之前的页面的功能.网上跳登陆页面的很多:返回之前页面功能没多少.这里我只是用了自己的方法,有缺点和其他方法也请指点!(´ε` ...
- kubernetes 实践三:使用kubeadm安装k8s1.16.0
环境版本说明: 三台vmware虚拟机,系统版本CentOS7.6. Kubernetes 1.16.0,当前最新版. flannel v0.11 docker 18.09 使用kubeadm可以简单 ...
- 精确选择识别png图片有像素的区域
/** * * *---------------------------------------* * | ***精确选择识别png图片有像素的区域*** | * *----------------- ...
- Apach Shiro MD5密码加密过程(明文生成密码过程)详细解析
前言: 最近再项目当中使用的ApachShiro安全框架,对于权限和服务器资源的保护都有一个很好的管理.前期主要参考的文章有 项目中设计密码的加盐处理以及二次加密问题,跟着断点 一步步揭开Apach ...
- 解决COM组件在WPF设计器中命名空间不存在XXX的问题(附带如何在WPF中使用APlayer引擎)
总结起来就是:设计器的版本要跟外部引用的库版本一致,否则XAML设计器就会显示不出来. 例如你的程序是X64的,但是引用的COM组件是32位的,就会显示不出来.这里的建议是:编译一个32位的COM中间 ...
- asp.net mvc 使用bootstrap的模态框插件modal
编译器:vs2012 jquery版本:jquery-1.10.2.js bootstrap:bootstrap.js v3.0.0,包含modal插件 我们要实现一个使用模态框展示从服务器获取的数据 ...
- 《Linux》跟老男孩学Linux核心系统命令
一.命令行简介 1.1 Linux 命令行提示符介绍 [root@root_pc ~]# #<==这是超级管理员root用户对应的命令行 [oldboy@oldboy_pc ~]$ #<= ...
- JS中的迭代器和生成器
利用迭代器生成一个遍历方法: let arr1 = [1, 2, 3, 11, 22, 13, 24]; function forOf(arr, callback) { // 找到迭代器函数 let ...
- 打造kubernetes 高可用集群(nginx+keepalived)
一.添加master 部署高可用k8s架构 1.拷贝/opt/kubernetes目录到新的master上(注意如果新机上部署了etcd要排除掉) scp -r /opt/kubernetes/ ro ...
- kubernetes集群的认证、授权、准入控制
一.kubernetes集群安全架构 用户使用kubectl.客户机或通过REST请求访问API.可以授权用户和Kubernetes服务帐户进行API访问.当一个请求到达API时,它会经历几个阶段,如 ...