aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/src/sdc.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-05-08 09:28:29 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-05-08 09:28:29 +0000
commiteb36dbf4fe229a76e09219fc6ed0b3ce9d81095f (patch)
treef5d0b70e6af19111a6377dc9256cb90cc4cdf97e /os/hal/src/sdc.c
parent82215e70199aa16ccad770a0e47ca5131a3f8b93 (diff)
downloadChibiOS-eb36dbf4fe229a76e09219fc6ed0b3ce9d81095f.tar.gz
ChibiOS-eb36dbf4fe229a76e09219fc6ed0b3ce9d81095f.tar.bz2
ChibiOS-eb36dbf4fe229a76e09219fc6ed0b3ce9d81095f.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2933 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/src/sdc.c')
-rw-r--r--os/hal/src/sdc.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/os/hal/src/sdc.c b/os/hal/src/sdc.c
index 3af421254..42b7cd903 100644
--- a/os/hal/src/sdc.c
+++ b/os/hal/src/sdc.c
@@ -272,8 +272,7 @@ bool_t sdcRead(SDCDriver *sdcp, uint32_t startblk,
chDbgCheck((sdcp != NULL) && (buf != NULL) && (n > 0), "sdcRead");
chSysLock();
- chDbgAssert(sdcp->state == SDC_ACTIVE,
- "sdcDisconnect(), #1", "invalid state");
+ chDbgAssert(sdcp->state == SDC_ACTIVE, "sdcRead(), #1", "invalid state");
sdcp->state = SDC_READING;
chSysUnlock();
@@ -304,20 +303,19 @@ bool_t sdcRead(SDCDriver *sdcp, uint32_t startblk,
bool_t sdcWrite(SDCDriver *sdcp, uint32_t startblk,
const uint8_t *buf, uint32_t n) {
bool_t sts;
- uint32_t resp[1];
- chDbgCheck((sdcp != NULL) && (buf != NULL) && (n > 0), "sdcWrite");
+ chDbgCheck((sdcp != NULL) && (buf != NULL) && (n > 0), "sdcRead");
+
+ chSysLock();
+ chDbgAssert(sdcp->state == SDC_ACTIVE, "sdcWrite(), #1", "invalid state");
+ sdcp->state = SDC_WRITING;
+ chSysUnlock();
if ((sdcp->cardmode & SDC_MODE_HIGH_CAPACITY) == 0)
startblk *= SDC_BLOCK_SIZE;
- if (sdc_lld_send_cmd_short_crc(sdcp, SDC_CMD_READ_MULTIPLE_BLOCK,
- startblk, resp))
- return TRUE;
-
sts = sdc_lld_write(sdcp, startblk, buf, n);
- sts = sts || sdc_lld_send_cmd_short_crc(sdcp, SDC_CMD_STOP_TRANSMISSION,
- 0, resp);
+ sdcp->state = SDC_ACTIVE;
return sts;
}