Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
arduino-pico
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xpstem
arduino-pico
Commits
24f63026
Unverified
Commit
24f63026
authored
Dec 27, 2023
by
Richard Teel
Committed by
GitHub
Dec 27, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated listfiles example and added CardInfo example (#1914)
parent
15eb459d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
222 additions
and
15 deletions
+222
-15
libraries/SD/examples/CardInfo/CardInfo.ino
libraries/SD/examples/CardInfo/CardInfo.ino
+180
-0
libraries/SD/examples/listfiles/listfiles.ino
libraries/SD/examples/listfiles/listfiles.ino
+42
-15
No files found.
libraries/SD/examples/CardInfo/CardInfo.ino
0 → 100644
View file @
24f63026
/*
SD card test
This example shows how use the utility libraries on which the'
SD library is based in order to get info about your SD card.
Very useful for testing a card when you're not sure whether its working or not.
The circuit:
SD card attached to SPI bus as follows on RP2040:
************ SPI0 ************
** MISO (AKA RX) - pin 0, 4, or 16
** MOSI (AKA TX) - pin 3, 7, or 19
** CS - pin 1, 5, or 17
** SCK - pin 2, 6, or 18
************ SPI1 ************
** MISO (AKA RX) - pin 8 or 12
** MOSI (AKA TX) - pin 11 or 15
** CS - pin 9 or 13
** SCK - pin 10 or 14
created 28 Mar 2011
by Limor Fried
modified 9 Apr 2012
by Tom Igoe
modified 26 Dec 2023
by Richard Teel from code provided by Renzo Mischianti
SOURCE: https://mischianti.org/raspberry-pi-pico-and-rp2040-boards-how-to-use-sd-card-5/
*/
// This are GP pins for SPI0 on the Raspberry Pi Pico board, and connect
// to different *board* level pinouts. Check the PCB while wiring.
// Only certain pins can be used by the SPI hardware, so if you change
// these be sure they are legal or the program will crash.
// See: https://datasheets.raspberrypi.com/picow/PicoW-A4-Pinout.pdf
const
int
_MISO
=
4
;
// AKA SPI RX
const
int
_MOSI
=
7
;
// AKA SPI TX
const
int
_CS
=
5
;
const
int
_SCK
=
6
;
// include the SD library:
#include <SPI.h>
#include <SD.h>
File
root
;
void
setup
()
{
// Open serial communications and wait for port to open:
Serial
.
begin
(
115200
);
while
(
!
Serial
)
{
delay
(
1
);
// wait for serial port to connect. Needed for native USB port only
}
Serial
.
println
(
"
\n
Initializing SD card..."
);
bool
sdInitialized
=
false
;
// Ensure the SPI pinout the SD card is connected to is configured properly
// Select the correct SPI based on _MISO pin for the RP2040
if
(
_MISO
==
0
||
_MISO
==
4
||
_MISO
==
16
)
{
SPI
.
setRX
(
_MISO
);
SPI
.
setTX
(
_MOSI
);
SPI
.
setSCK
(
_SCK
);
sdInitialized
=
SD
.
begin
(
_CS
);
}
else
if
(
_MISO
==
8
||
_MISO
==
12
)
{
SPI1
.
setRX
(
_MISO
);
SPI1
.
setTX
(
_MOSI
);
SPI1
.
setSCK
(
_SCK
);
sdInitialized
=
SD
.
begin
(
_CS
,
SPI1
);
}
else
{
Serial
.
println
(
F
(
"ERROR: Unknown SPI Configuration"
));
return
;
}
if
(
!
sdInitialized
)
{
Serial
.
println
(
"initialization failed. Things to check:"
);
Serial
.
println
(
"* is a card inserted?"
);
Serial
.
println
(
"* is your wiring correct?"
);
Serial
.
println
(
"* did you change the chipSelect pin to match your shield or module?"
);
return
;
}
else
{
Serial
.
println
(
"Wiring is correct and a card is present."
);
}
// 0 - SD V1, 1 - SD V2, or 3 - SDHC/SDXC
// print the type of card
Serial
.
println
();
Serial
.
print
(
"Card type: "
);
switch
(
SD
.
type
())
{
case
0
:
Serial
.
println
(
"SD1"
);
break
;
case
1
:
Serial
.
println
(
"SD2"
);
break
;
case
3
:
Serial
.
println
(
"SDHC/SDXC"
);
break
;
default:
Serial
.
println
(
"Unknown"
);
}
Serial
.
print
(
"Cluster size: "
);
Serial
.
println
(
SD
.
clusterSize
());
Serial
.
print
(
"Blocks x Cluster: "
);
Serial
.
println
(
SD
.
blocksPerCluster
());
Serial
.
print
(
"Blocks size: "
);
Serial
.
println
(
SD
.
blockSize
());
Serial
.
print
(
"Total Blocks: "
);
Serial
.
println
(
SD
.
totalBlocks
());
Serial
.
println
();
Serial
.
print
(
"Total Cluster: "
);
Serial
.
println
(
SD
.
totalClusters
());
Serial
.
println
();
// print the type and size of the first FAT-type volume
uint32_t
volumesize
;
Serial
.
print
(
"Volume type is: FAT"
);
Serial
.
println
(
SD
.
fatType
(),
DEC
);
volumesize
=
SD
.
totalClusters
();
volumesize
*=
SD
.
clusterSize
();
volumesize
/=
1000
;
Serial
.
print
(
"Volume size (Kb): "
);
Serial
.
println
(
volumesize
);
Serial
.
print
(
"Volume size (Mb): "
);
volumesize
/=
1024
;
Serial
.
println
(
volumesize
);
Serial
.
print
(
"Volume size (Gb): "
);
Serial
.
println
((
float
)
volumesize
/
1024.0
);
Serial
.
print
(
"Card size: "
);
Serial
.
println
((
float
)
SD
.
size
()
/
1000
);
FSInfo
fs_info
;
SDFS
.
info
(
fs_info
);
Serial
.
print
(
"Total bytes: "
);
Serial
.
println
(
fs_info
.
totalBytes
);
Serial
.
print
(
"Used bytes: "
);
Serial
.
println
(
fs_info
.
usedBytes
);
root
=
SD
.
open
(
"/"
);
printDirectory
(
root
,
0
);
}
void
loop
(
void
)
{
// nothing happens after setup finishes.
}
void
printDirectory
(
File
dir
,
int
numTabs
)
{
while
(
true
)
{
File
entry
=
dir
.
openNextFile
();
if
(
!
entry
)
{
// no more files
break
;
}
for
(
uint8_t
i
=
0
;
i
<
numTabs
;
i
++
)
{
Serial
.
print
(
'\t'
);
}
Serial
.
print
(
entry
.
name
());
if
(
entry
.
isDirectory
())
{
Serial
.
println
(
"/"
);
printDirectory
(
entry
,
numTabs
+
1
);
}
else
{
// files have sizes, directories do not
Serial
.
print
(
"
\t\t
"
);
Serial
.
print
(
entry
.
size
(),
DEC
);
time_t
cr
=
entry
.
getCreationTime
();
time_t
lw
=
entry
.
getLastWrite
();
struct
tm
*
tmstruct
=
localtime
(
&
cr
);
Serial
.
printf
(
"
\t
CREATION: %d-%02d-%02d %02d:%02d:%02d"
,
(
tmstruct
->
tm_year
)
+
1900
,
(
tmstruct
->
tm_mon
)
+
1
,
tmstruct
->
tm_mday
,
tmstruct
->
tm_hour
,
tmstruct
->
tm_min
,
tmstruct
->
tm_sec
);
tmstruct
=
localtime
(
&
lw
);
Serial
.
printf
(
"
\t
LAST WRITE: %d-%02d-%02d %02d:%02d:%02d
\n
"
,
(
tmstruct
->
tm_year
)
+
1900
,
(
tmstruct
->
tm_mon
)
+
1
,
tmstruct
->
tm_mday
,
tmstruct
->
tm_hour
,
tmstruct
->
tm_min
,
tmstruct
->
tm_sec
);
}
entry
.
close
();
}
}
libraries/SD/examples/listfiles/listfiles.ino
View file @
24f63026
...
...
@@ -5,11 +5,17 @@
directory on a SD card
The circuit:
SD card attached to SPI bus as follows:
** MISO - pin 4
** MOSI - pin 7
** CS - pin 5
** SCK - pin 6
SD card attached to SPI bus as follows on RP2040:
************ SPI0 ************
** MISO (AKA RX) - pin 0, 4, or 16
** MOSI (AKA TX) - pin 3, 7, or 19
** CS - pin 1, 5, or 17
** SCK - pin 2, 6, or 18
************ SPI1 ************
** MISO (AKA RX) - pin 8 or 12
** MOSI (AKA TX) - pin 11 or 15
** CS - pin 9 or 13
** SCK - pin 10 or 14
created Nov 2010
by David A. Mellis
...
...
@@ -17,6 +23,10 @@
by Tom Igoe
modified 2 Feb 2014
by Scott Fitzgerald
modified 12 Feb 2023
by Earle F. Philhower, III
modified 26 Dec 2023
by Richard Teel
This example code is in the public domain.
...
...
@@ -27,8 +37,8 @@
// Only certain pins can be used by the SPI hardware, so if you change
// these be sure they are legal or the program will crash.
// See: https://datasheets.raspberrypi.com/picow/PicoW-A4-Pinout.pdf
const
int
_MISO
=
4
;
const
int
_MOSI
=
7
;
const
int
_MISO
=
4
;
// AKA SPI RX
const
int
_MOSI
=
7
;
// AKA SPI TX
const
int
_CS
=
5
;
const
int
_SCK
=
6
;
...
...
@@ -41,14 +51,31 @@ void setup() {
// Open serial communications and wait for port to open:
Serial
.
begin
(
115200
);
Serial
.
print
(
"Initializing SD card..."
);
while
(
!
Serial
)
{
delay
(
1
);
// wait for serial port to connect. Needed for native USB port only
}
Serial
.
println
(
"
\n
Initializing SD card..."
);
bool
sdInitialized
=
false
;
// Ensure the SPI pinout the SD card is connected to is configured properly
SPI
.
setRX
(
_MISO
);
SPI
.
setTX
(
_MOSI
);
SPI
.
setSCK
(
_SCK
);
// Select the correct SPI based on _MISO pin for the RP2040
if
(
_MISO
==
0
||
_MISO
==
4
||
_MISO
==
16
)
{
SPI
.
setRX
(
_MISO
);
SPI
.
setTX
(
_MOSI
);
SPI
.
setSCK
(
_SCK
);
sdInitialized
=
SD
.
begin
(
_CS
);
}
else
if
(
_MISO
==
8
||
_MISO
==
12
)
{
SPI1
.
setRX
(
_MISO
);
SPI1
.
setTX
(
_MOSI
);
SPI1
.
setSCK
(
_SCK
);
sdInitialized
=
SD
.
begin
(
_CS
,
SPI1
);
}
else
{
Serial
.
println
(
F
(
"ERROR: Unknown SPI Configuration"
));
return
;
}
if
(
!
SD
.
begin
(
_CS
)
)
{
if
(
!
sdInitialized
)
{
Serial
.
println
(
"initialization failed!"
);
return
;
}
...
...
@@ -68,8 +95,8 @@ void loop() {
void
printDirectory
(
File
dir
,
int
numTabs
)
{
while
(
true
)
{
File
entry
=
dir
.
openNextFile
();
if
(
!
entry
)
{
File
entry
=
dir
.
openNextFile
();
if
(
!
entry
)
{
// no more files
break
;
}
...
...
@@ -86,7 +113,7 @@ void printDirectory(File dir, int numTabs) {
Serial
.
print
(
entry
.
size
(),
DEC
);
time_t
cr
=
entry
.
getCreationTime
();
time_t
lw
=
entry
.
getLastWrite
();
struct
tm
*
tmstruct
=
localtime
(
&
cr
);
struct
tm
*
tmstruct
=
localtime
(
&
cr
);
Serial
.
printf
(
"
\t
CREATION: %d-%02d-%02d %02d:%02d:%02d"
,
(
tmstruct
->
tm_year
)
+
1900
,
(
tmstruct
->
tm_mon
)
+
1
,
tmstruct
->
tm_mday
,
tmstruct
->
tm_hour
,
tmstruct
->
tm_min
,
tmstruct
->
tm_sec
);
tmstruct
=
localtime
(
&
lw
);
Serial
.
printf
(
"
\t
LAST WRITE: %d-%02d-%02d %02d:%02d:%02d
\n
"
,
(
tmstruct
->
tm_year
)
+
1900
,
(
tmstruct
->
tm_mon
)
+
1
,
tmstruct
->
tm_mday
,
tmstruct
->
tm_hour
,
tmstruct
->
tm_min
,
tmstruct
->
tm_sec
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment