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/ ...
随机推荐
- 协议——UART(RS232)
一.UART简介 UART(universal asynchronous receiver-transmitter)是一种采用异步串行通信方式的通用异步收发传输器.一般来说,UART总是和RS232成 ...
- 在springMVC的controller中获取request,response对象的一个方法
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttr ...
- CF449E Jzzhu and Squares
题目大意:有一个$n\times m$的方格图,求其中所有的格点正方形完整包含的小方格个数,多组询问.$n,m\leqslant 10^6$ 题解:令$n\leqslant m$.有一个显然的式子:$ ...
- Java线程volatile(二)
volatile:使变量在多个线程中可见 在java 中每个线程都会有一块工作内存区,其中存放着所有线程共享的主内存中变量的拷贝.当线程执行时,在自己的工作内存区操作这些变量,为了存取一个共享的变量, ...
- (七) Docker 部署 MySql8.0 一主一从 高可用集群
参考并感谢 官方文档 https://hub.docker.com/_/mysql y0ngb1n https://www.jianshu.com/p/0439206e1f28 vito0319 ht ...
- 【转载】 C#使用string.IsNullOrWhiteSpace方法判断字符串是否为非空字符
在C#编程过程中,很多时候需要判断传入过来的字符串是否为Null或者空字符或者空白字符,此时就可以使用到string.IsNullOrWhiteSpace方法来判断,如果字符串为null或者空字符Em ...
- django+celery+redis环境配置
celery是python开发的分布式任务调度模块 Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,celery支持的消息服务有RabbitMQ,redis甚至是数据库,redis ...
- mysql如何让有数据的表的自增主键重新设置从1开始连续自增
项目开发中,有些固定数据在数据表中,主键是从1自增的,有时候我们会删除一些数据, 这种情况下,主键就会不连续.如何恢复到像第一次插入数据一样主键从1开始连续增长, 这里我找到一种解决方法: 如上面一张 ...
- 阿里云服务器远程连接错误:由于一个协议错误(代码:0x112f),远程会话将被中断。
2019年10月,阿里云服务器远程连接忽然无法登录.当时正在清理c盘空间,C盘只剩下30+M,忽然远程桌面掉线,以为断网了,再次远程桌面连接时,就出现一下错误. 解决方案:万能的重启!!!具体错误原因 ...
- Linux环境下安装RabbitMQ
首先RabbitMQ是使用erLang编写的开源消息中间件.所以需要先安装erlang环境. 我使用的是CentOS的系统安装erlang21.0的步骤如下: #下载安装包 (下面是我用的比较匹配的版 ...