Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wwsmg1
rt-thread
提交
c5949c27
R
rt-thread
项目概览
wwsmg1
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c5949c27
编写于
5月 20, 2016
作者:
B
Bernard Xiong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[DeviceDrivers] Update SPI flash drivers.
上级
050da8a6
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
513 addition
and
31 deletion
+513
-31
components/drivers/spi/SConscript
components/drivers/spi/SConscript
+3
-0
components/drivers/spi/spi_flash.h
components/drivers/spi/spi_flash.h
+36
-0
components/drivers/spi/spi_flash_at45dbxx.c
components/drivers/spi/spi_flash_at45dbxx.c
+14
-4
components/drivers/spi/spi_flash_at45dbxx.h
components/drivers/spi/spi_flash_at45dbxx.h
+24
-0
components/drivers/spi/spi_flash_gd.c
components/drivers/spi/spi_flash_gd.c
+346
-0
components/drivers/spi/spi_flash_gd.h
components/drivers/spi/spi_flash_gd.h
+32
-0
components/drivers/spi/spi_flash_sst25vfxx.c
components/drivers/spi/spi_flash_sst25vfxx.c
+14
-4
components/drivers/spi/spi_flash_sst25vfxx.h
components/drivers/spi/spi_flash_sst25vfxx.h
+14
-4
components/drivers/spi/spi_flash_w25qxx.c
components/drivers/spi/spi_flash_w25qxx.c
+17
-6
components/drivers/spi/spi_flash_w25qxx.h
components/drivers/spi/spi_flash_w25qxx.h
+13
-13
未找到文件。
components/drivers/spi/SConscript
浏览文件 @
c5949c27
...
@@ -21,6 +21,9 @@ if GetDepend('RT_USING_AT45DBXX'):
...
@@ -21,6 +21,9 @@ if GetDepend('RT_USING_AT45DBXX'):
if
GetDepend
(
'RT_USING_SST25VFXX'
):
if
GetDepend
(
'RT_USING_SST25VFXX'
):
src_device
+=
[
'spi_flash_sst25vfxx.c'
]
src_device
+=
[
'spi_flash_sst25vfxx.c'
]
if
GetDepend
(
'RT_USING_GD'
):
src_device
+=
[
'spi_flash_gd.c'
]
src
+=
src_device
src
+=
src_device
group
=
DefineGroup
(
'DeviceDrivers'
,
src
,
depend
=
[
'RT_USING_SPI'
],
CPPPATH
=
CPPPATH
)
group
=
DefineGroup
(
'DeviceDrivers'
,
src
,
depend
=
[
'RT_USING_SPI'
],
CPPPATH
=
CPPPATH
)
...
...
components/drivers/spi/spi_flash.h
0 → 100644
浏览文件 @
c5949c27
/*
* File : spi_flash.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2016, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Change Logs:
* Date Author Notes
* 2016/5/20 bernard the first version
*/
#ifndef SPI_FLASH_H__
#define SPI_FLASH_H__
struct
spi_flash_device
{
struct
rt_device
flash_device
;
struct
rt_device_blk_geometry
geometry
;
struct
rt_spi_device
*
rt_spi_device
;
struct
rt_mutex
lock
;
};
#endif
components/drivers/spi/spi_flash_at45dbxx.c
浏览文件 @
c5949c27
/*
/*
* File :
rtdef.h
* File :
spi_flash_at45dbxx.c
* This file is part of RT-Thread RTOS
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
*
*
* The license and distribution terms for this file may be
* This program is free software; you can redistribute it and/or modify
* found in the file LICENSE in this distribution or at
* it under the terms of the GNU General Public License as published by
* http://www.rt-thread.org/license/LICENSE
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*
* Change Logs:
* Change Logs:
* Date Author Notes
* Date Author Notes
...
...
components/drivers/spi/spi_flash_at45dbxx.h
浏览文件 @
c5949c27
/*
* File : spi_flash_at45dbxx.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Change Logs:
* Date Author Notes
* 2011-12-16 aozima the first version
*/
#ifndef SPI_FLASH_AT45DBXX_H_INCLUDED
#ifndef SPI_FLASH_AT45DBXX_H_INCLUDED
#define SPI_FLASH_AT45DBXX_H_INCLUDED
#define SPI_FLASH_AT45DBXX_H_INCLUDED
...
...
components/drivers/spi/spi_flash_gd.c
0 → 100644
浏览文件 @
c5949c27
/*
* File : spi_flash_gd.c
* This file is part of RT-Thread RTOS
* Copyright (c) 2016 Shanghai Fullhan Microelectronics Co., Ltd.
* All rights reserved
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Change Logs:
* Date Author Notes
* 2015-10-11 fullhan copy from winbond flash
*/
#include <stdint.h>
#include <rtthread.h>
#include <rtdevice.h>
#include "spi_flash.h"
#include "spi_flash_gd.h"
#define FLASH_DEBUG
#ifdef FLASH_DEBUG
#define FLASH_TRACE rt_kprintf
#else
#define FLASH_TRACE(...)
#endif
/* #ifdef FLASH_DEBUG */
#define PAGE_SIZE 4096
/* JEDEC Manufacturer's ID */
#define MF_ID (0xC8)
/* JEDEC Device ID: Memory type and Capacity */
#define MTC_GD25Q128 (0x4018)
/* command list */
#define CMD_WRSR (0x01)
/* Write Status Register */
#define CMD_PP (0x02)
/* Page Program */
#define CMD_READ (0x03)
/* Read Data */
#define CMD_WRDI (0x04)
/* Write Disable */
#define CMD_RDSR1 (0x05)
/* Read Status Register-1 */
#define CMD_WREN (0x06)
/* Write Enable */
#define CMD_FAST_READ (0x0B)
/* Fast Read */
#define CMD_ERASE_4K (0x20)
/* Sector Erase:4K */
#define CMD_RDSR2 (0x35)
/* Read Status Register-2 */
#define CMD_ERASE_32K (0x52)
/* 32KB Block Erase */
#define CMD_JEDEC_ID (0x9F)
/* Read JEDEC ID */
#define CMD_ERASE_full (0xC7)
/* Chip Erase */
#define CMD_ERASE_64K (0xD8)
/* 64KB Block Erase */
#define DUMMY (0xFF)
static
struct
spi_flash_device
spi_flash_device
;
static
void
flash_lock
(
struct
spi_flash_device
*
flash_device
)
{
rt_mutex_take
(
&
flash_device
->
lock
,
RT_WAITING_FOREVER
);
}
static
void
flash_unlock
(
struct
spi_flash_device
*
flash_device
)
{
rt_mutex_release
(
&
flash_device
->
lock
);
}
static
uint8_t
w25qxx_read_status
(
void
)
{
return
rt_spi_sendrecv8
(
spi_flash_device
.
rt_spi_device
,
CMD_RDSR1
);
}
static
void
w25qxx_wait_busy
(
void
)
{
while
(
w25qxx_read_status
()
&
(
0x01
));
}
/** \brief read [size] byte from [offset] to [buffer]
*
* \param offset uint32_t unit : byte
* \param buffer uint8_t*
* \param size uint32_t unit : byte
* \return uint32_t byte for read
*
*/
static
uint32_t
w25qxx_read
(
uint32_t
offset
,
uint8_t
*
buffer
,
uint32_t
size
)
{
uint8_t
send_buffer
[
4
];
send_buffer
[
0
]
=
CMD_WRDI
;
rt_spi_send
(
spi_flash_device
.
rt_spi_device
,
send_buffer
,
1
);
send_buffer
[
0
]
=
CMD_READ
;
send_buffer
[
1
]
=
(
uint8_t
)(
offset
>>
16
);
send_buffer
[
2
]
=
(
uint8_t
)(
offset
>>
8
);
send_buffer
[
3
]
=
(
uint8_t
)(
offset
);
rt_spi_send_then_recv
(
spi_flash_device
.
rt_spi_device
,
send_buffer
,
4
,
buffer
,
size
);
return
size
;
}
/** \brief write N page on [page]
*
* \param page_addr uint32_t unit : byte (4096 * N,1 page = 4096byte)
* \param buffer const uint8_t*
* \return uint32_t
*
*/
static
uint32_t
w25qxx_page_write
(
uint32_t
page_addr
,
const
uint8_t
*
buffer
)
{
uint32_t
index
;
uint8_t
send_buffer
[
4
];
RT_ASSERT
((
page_addr
&
0xFF
)
==
0
);
/* page addr must align to 256byte. */
send_buffer
[
0
]
=
CMD_WREN
;
rt_spi_send
(
spi_flash_device
.
rt_spi_device
,
send_buffer
,
1
);
send_buffer
[
0
]
=
CMD_ERASE_4K
;
send_buffer
[
1
]
=
(
page_addr
>>
16
);
send_buffer
[
2
]
=
(
page_addr
>>
8
);
send_buffer
[
3
]
=
(
page_addr
);
rt_spi_send
(
spi_flash_device
.
rt_spi_device
,
send_buffer
,
4
);
w25qxx_wait_busy
();
// wait erase done.
for
(
index
=
0
;
index
<
(
PAGE_SIZE
/
256
);
index
++
)
{
send_buffer
[
0
]
=
CMD_WREN
;
rt_spi_send
(
spi_flash_device
.
rt_spi_device
,
send_buffer
,
1
);
send_buffer
[
0
]
=
CMD_PP
;
send_buffer
[
1
]
=
(
uint8_t
)(
page_addr
>>
16
);
send_buffer
[
2
]
=
(
uint8_t
)(
page_addr
>>
8
);
send_buffer
[
3
]
=
(
uint8_t
)(
page_addr
);
rt_spi_send_then_send
(
spi_flash_device
.
rt_spi_device
,
send_buffer
,
4
,
buffer
,
256
);
buffer
+=
256
;
page_addr
+=
256
;
w25qxx_wait_busy
();
}
send_buffer
[
0
]
=
CMD_WRDI
;
rt_spi_send
(
spi_flash_device
.
rt_spi_device
,
send_buffer
,
1
);
return
PAGE_SIZE
;
}
/* RT-Thread device interface */
static
rt_err_t
w25qxx_flash_init
(
rt_device_t
dev
)
{
return
RT_EOK
;
}
static
rt_err_t
w25qxx_flash_open
(
rt_device_t
dev
,
rt_uint16_t
oflag
)
{
uint8_t
send_buffer
[
3
];
flash_lock
((
struct
spi_flash_device
*
)
dev
);
send_buffer
[
0
]
=
CMD_WREN
;
rt_spi_send
(
spi_flash_device
.
rt_spi_device
,
send_buffer
,
1
);
send_buffer
[
0
]
=
CMD_WRSR
;
send_buffer
[
1
]
=
0
;
send_buffer
[
2
]
=
0
;
rt_spi_send
(
spi_flash_device
.
rt_spi_device
,
send_buffer
,
3
);
w25qxx_wait_busy
();
flash_unlock
((
struct
spi_flash_device
*
)
dev
);
return
RT_EOK
;
}
static
rt_err_t
w25qxx_flash_close
(
rt_device_t
dev
)
{
return
RT_EOK
;
}
static
rt_err_t
w25qxx_flash_control
(
rt_device_t
dev
,
rt_uint8_t
cmd
,
void
*
args
)
{
RT_ASSERT
(
dev
!=
RT_NULL
);
if
(
cmd
==
RT_DEVICE_CTRL_BLK_GETGEOME
)
{
struct
rt_device_blk_geometry
*
geometry
;
geometry
=
(
struct
rt_device_blk_geometry
*
)
args
;
if
(
geometry
==
RT_NULL
)
return
-
RT_ERROR
;
geometry
->
bytes_per_sector
=
spi_flash_device
.
geometry
.
bytes_per_sector
;
geometry
->
sector_count
=
spi_flash_device
.
geometry
.
sector_count
;
geometry
->
block_size
=
spi_flash_device
.
geometry
.
block_size
;
}
return
RT_EOK
;
}
static
rt_size_t
w25qxx_flash_read
(
rt_device_t
dev
,
rt_off_t
pos
,
void
*
buffer
,
rt_size_t
size
)
{
flash_lock
((
struct
spi_flash_device
*
)
dev
);
w25qxx_read
(
pos
*
spi_flash_device
.
geometry
.
bytes_per_sector
,
buffer
,
size
*
spi_flash_device
.
geometry
.
bytes_per_sector
);
flash_unlock
((
struct
spi_flash_device
*
)
dev
);
return
size
;
}
static
rt_size_t
w25qxx_flash_write
(
rt_device_t
dev
,
rt_off_t
pos
,
const
void
*
buffer
,
rt_size_t
size
)
{
rt_size_t
i
=
0
;
rt_size_t
block
=
size
;
const
uint8_t
*
ptr
=
buffer
;
flash_lock
((
struct
spi_flash_device
*
)
dev
);
while
(
block
--
)
{
w25qxx_page_write
((
pos
+
i
)
*
spi_flash_device
.
geometry
.
bytes_per_sector
,
ptr
);
ptr
+=
PAGE_SIZE
;
i
++
;
}
flash_unlock
((
struct
spi_flash_device
*
)
dev
);
return
size
;
}
rt_err_t
gd_init
(
const
char
*
flash_device_name
,
const
char
*
spi_device_name
)
{
struct
rt_spi_device
*
rt_spi_device
;
/* initialize mutex */
if
(
rt_mutex_init
(
&
spi_flash_device
.
lock
,
spi_device_name
,
RT_IPC_FLAG_FIFO
)
!=
RT_EOK
)
{
rt_kprintf
(
"init sd lock mutex failed
\n
"
);
return
-
RT_ENOSYS
;
}
rt_spi_device
=
(
struct
rt_spi_device
*
)
rt_device_find
(
spi_device_name
);
if
(
rt_spi_device
==
RT_NULL
)
{
FLASH_TRACE
(
"spi device %s not found!
\r\n
"
,
spi_device_name
);
return
-
RT_ENOSYS
;
}
spi_flash_device
.
rt_spi_device
=
rt_spi_device
;
/* config spi */
{
struct
rt_spi_configuration
cfg
;
cfg
.
data_width
=
8
;
cfg
.
mode
=
RT_SPI_MODE_0
|
RT_SPI_MSB
;
/* SPI Compatible: Mode 0 and Mode 3 */
cfg
.
max_hz
=
50
*
1000
*
1000
;
/* 50M */
rt_spi_configure
(
spi_flash_device
.
rt_spi_device
,
&
cfg
);
}
/* init flash */
{
rt_uint8_t
cmd
;
rt_uint8_t
id_recv
[
3
];
uint16_t
memory_type_capacity
;
flash_lock
(
&
spi_flash_device
);
cmd
=
0xFF
;
/* reset SPI FLASH, cancel all cmd in processing. */
rt_spi_send
(
spi_flash_device
.
rt_spi_device
,
&
cmd
,
1
);
cmd
=
CMD_WRDI
;
rt_spi_send
(
spi_flash_device
.
rt_spi_device
,
&
cmd
,
1
);
/* read flash id */
cmd
=
CMD_JEDEC_ID
;
rt_spi_send_then_recv
(
spi_flash_device
.
rt_spi_device
,
&
cmd
,
1
,
id_recv
,
3
);
flash_unlock
(
&
spi_flash_device
);
if
(
id_recv
[
0
]
!=
MF_ID
)
{
FLASH_TRACE
(
"Manufacturers ID error!
\r\n
"
);
FLASH_TRACE
(
"JEDEC Read-ID Data : %02X %02X %02X
\r\n
"
,
id_recv
[
0
],
id_recv
[
1
],
id_recv
[
2
]);
return
-
RT_ENOSYS
;
}
spi_flash_device
.
geometry
.
bytes_per_sector
=
4096
;
spi_flash_device
.
geometry
.
block_size
=
4096
;
/* block erase: 4k */
/* get memory type and capacity */
memory_type_capacity
=
id_recv
[
1
];
memory_type_capacity
=
(
memory_type_capacity
<<
8
)
|
id_recv
[
2
];
if
(
memory_type_capacity
==
MTC_GD25Q128
)
{
FLASH_TRACE
(
"GD128 detection
\r\n
"
);
spi_flash_device
.
geometry
.
sector_count
=
4096
;
}
else
{
FLASH_TRACE
(
"Memory Capacity error!
\r\n
"
);
return
-
RT_ENOSYS
;
}
}
/* register device */
spi_flash_device
.
flash_device
.
type
=
RT_Device_Class_Block
;
spi_flash_device
.
flash_device
.
init
=
w25qxx_flash_init
;
spi_flash_device
.
flash_device
.
open
=
w25qxx_flash_open
;
spi_flash_device
.
flash_device
.
close
=
w25qxx_flash_close
;
spi_flash_device
.
flash_device
.
read
=
w25qxx_flash_read
;
spi_flash_device
.
flash_device
.
write
=
w25qxx_flash_write
;
spi_flash_device
.
flash_device
.
control
=
w25qxx_flash_control
;
/* no private */
spi_flash_device
.
flash_device
.
user_data
=
RT_NULL
;
rt_device_register
(
&
spi_flash_device
.
flash_device
,
flash_device_name
,
RT_DEVICE_FLAG_RDWR
|
RT_DEVICE_FLAG_STANDALONE
);
return
RT_EOK
;
}
components/drivers/spi/spi_flash_gd.h
0 → 100644
浏览文件 @
c5949c27
/*
* File : spi_flash_gd.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2016, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Change Logs:
* Date Author Notes
* 2015-10-11 fullhan copy from winbond flash
*/
#ifndef SPI_FLASH_GD_H_
#define SPI_FLASH_GD_H_
#include <rtthread.h>
extern
rt_err_t
gd_init
(
const
char
*
flash_device_name
,
const
char
*
spi_device_name
);
#endif
/* SPI_FLASH_GD_H_ */
components/drivers/spi/spi_flash_sst25vfxx.c
浏览文件 @
c5949c27
/*
/*
* File :
rtdef.h
* File :
spi_flash_sst25vfxx.c
* This file is part of RT-Thread RTOS
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
*
*
* The license and distribution terms for this file may be
* This program is free software; you can redistribute it and/or modify
* found in the file LICENSE in this distribution or at
* it under the terms of the GNU General Public License as published by
* http://www.rt-thread.org/license/LICENSE
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*
* Change Logs:
* Change Logs:
* Date Author Notes
* Date Author Notes
...
...
components/drivers/spi/spi_flash_sst25vfxx.h
浏览文件 @
c5949c27
/*
/*
* File :
rtdef
.h
* File :
spi_flash_sst25vxx
.h
* This file is part of RT-Thread RTOS
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
*
*
* The license and distribution terms for this file may be
* This program is free software; you can redistribute it and/or modify
* found in the file LICENSE in this distribution or at
* it under the terms of the GNU General Public License as published by
* http://www.rt-thread.org/license/LICENSE
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*
* Change Logs:
* Change Logs:
* Date Author Notes
* Date Author Notes
...
...
components/drivers/spi/spi_flash_w25qxx.c
浏览文件 @
c5949c27
...
@@ -3,9 +3,19 @@
...
@@ -3,9 +3,19 @@
* This file is part of RT-Thread RTOS
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
*
*
* The license and distribution terms for this file may be
* This program is free software; you can redistribute it and/or modify
* found in the file LICENSE in this distribution or at
* it under the terms of the GNU General Public License as published by
* http://www.rt-thread.org/license/LICENSE
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*
* Change Logs:
* Change Logs:
* Date Author Notes
* Date Author Notes
...
@@ -13,10 +23,12 @@
...
@@ -13,10 +23,12 @@
* 2012-05-06 aozima can page write.
* 2012-05-06 aozima can page write.
* 2012-08-23 aozima add flash lock.
* 2012-08-23 aozima add flash lock.
* 2012-08-24 aozima fixed write status register BUG.
* 2012-08-24 aozima fixed write status register BUG.
* 2015-05-13 bernard add GD25Q flash ID.
*/
*/
#include <stdint.h>
#include <stdint.h>
#include <rtdevice.h>
#include "spi_flash.h"
#include "spi_flash_w25qxx.h"
#include "spi_flash_w25qxx.h"
#define FLASH_DEBUG
#define FLASH_DEBUG
...
@@ -31,7 +43,6 @@
...
@@ -31,7 +43,6 @@
/* JEDEC Manufacturer��s ID */
/* JEDEC Manufacturer��s ID */
#define MF_ID (0xEF)
#define MF_ID (0xEF)
#define GD_ID (0xC8)
/* JEDEC Device ID: Memory type and Capacity */
/* JEDEC Device ID: Memory type and Capacity */
#define MTC_W25Q80_BV (0x4014)
/* W25Q80BV */
#define MTC_W25Q80_BV (0x4014)
/* W25Q80BV */
...
@@ -301,7 +312,7 @@ rt_err_t w25qxx_init(const char * flash_device_name, const char * spi_device_nam
...
@@ -301,7 +312,7 @@ rt_err_t w25qxx_init(const char * flash_device_name, const char * spi_device_nam
flash_unlock
(
&
spi_flash_device
);
flash_unlock
(
&
spi_flash_device
);
if
(
id_recv
[
0
]
!=
MF_ID
&&
id_recv
[
0
]
!=
GD_ID
)
if
(
id_recv
[
0
]
!=
MF_ID
)
{
{
FLASH_TRACE
(
"Manufacturers ID error!
\r\n
"
);
FLASH_TRACE
(
"Manufacturers ID error!
\r\n
"
);
FLASH_TRACE
(
"JEDEC Read-ID Data : %02X %02X %02X
\r\n
"
,
id_recv
[
0
],
id_recv
[
1
],
id_recv
[
2
]);
FLASH_TRACE
(
"JEDEC Read-ID Data : %02X %02X %02X
\r\n
"
,
id_recv
[
0
],
id_recv
[
1
],
id_recv
[
2
]);
...
...
components/drivers/spi/spi_flash_w25qxx.h
浏览文件 @
c5949c27
...
@@ -3,9 +3,19 @@
...
@@ -3,9 +3,19 @@
* This file is part of RT-Thread RTOS
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
* COPYRIGHT (C) 2006 - 2011, RT-Thread Development Team
*
*
* The license and distribution terms for this file may be
* This program is free software; you can redistribute it and/or modify
* found in the file LICENSE in this distribution or at
* it under the terms of the GNU General Public License as published by
* http://www.rt-thread.org/license/LICENSE
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*
* Change Logs:
* Change Logs:
* Date Author Notes
* Date Author Notes
...
@@ -17,18 +27,8 @@
...
@@ -17,18 +27,8 @@
#define SPI_FLASH_W25QXX_H_INCLUDED
#define SPI_FLASH_W25QXX_H_INCLUDED
#include <rtthread.h>
#include <rtthread.h>
#include <drivers/spi.h>
struct
spi_flash_device
{
struct
rt_device
flash_device
;
struct
rt_device_blk_geometry
geometry
;
struct
rt_spi_device
*
rt_spi_device
;
struct
rt_mutex
lock
;
};
extern
rt_err_t
w25qxx_init
(
const
char
*
flash_device_name
,
extern
rt_err_t
w25qxx_init
(
const
char
*
flash_device_name
,
const
char
*
spi_device_name
);
const
char
*
spi_device_name
);
#endif // SPI_FLASH_W25QXX_H_INCLUDED
#endif // SPI_FLASH_W25QXX_H_INCLUDED
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录