ChibiOS/HAL  6.1.0
hal_sdc_lld.c
Go to the documentation of this file.
1 /*
2  ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
3 
4  Licensed under the Apache License, Version 2.0 (the "License");
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 */
16 
17 /**
18  * @file hal_sdc_lld.c
19  * @brief PLATFORM SDC subsystem low level driver source.
20  *
21  * @addtogroup SDC
22  * @{
23  */
24 
25 #include "hal.h"
26 
27 #if (HAL_USE_SDC == TRUE) || defined(__DOXYGEN__)
28 
29 /*===========================================================================*/
30 /* Driver local definitions. */
31 /*===========================================================================*/
32 
33 /*===========================================================================*/
34 /* Driver exported variables. */
35 /*===========================================================================*/
36 
37 /**
38  * @brief SDCD1 driver identifier.
39  */
40 #if (PLATFORM_SDC_USE_SDC1 == TRUE) || defined(__DOXYGEN__)
42 #endif
43 
44 /*===========================================================================*/
45 /* Driver local variables and types. */
46 /*===========================================================================*/
47 
48 /*===========================================================================*/
49 /* Driver local functions. */
50 /*===========================================================================*/
51 
52 /*===========================================================================*/
53 /* Driver interrupt handlers. */
54 /*===========================================================================*/
55 
56 /*===========================================================================*/
57 /* Driver exported functions. */
58 /*===========================================================================*/
59 
60 /**
61  * @brief Low level SDC driver initialization.
62  *
63  * @notapi
64  */
65 void sdc_lld_init(void) {
66 
67 #if PLATFORM_SDC_USE_SDC1 == TRUE
68  sdcObjectInit(&SDCD1);
69 #endif
70 }
71 
72 /**
73  * @brief Configures and activates the SDC peripheral.
74  *
75  * @param[in] sdcp pointer to the @p SDCDriver object
76  *
77  * @notapi
78  */
79 void sdc_lld_start(SDCDriver *sdcp) {
80 
81  if (sdcp->state == BLK_STOP) {
82 
83  }
84 }
85 
86 /**
87  * @brief Deactivates the SDC peripheral.
88  *
89  * @param[in] sdcp pointer to the @p SDCDriver object
90  *
91  * @notapi
92  */
93 void sdc_lld_stop(SDCDriver *sdcp) {
94 
95  if (sdcp->state != BLK_STOP) {
96 
97  }
98 }
99 
100 /**
101  * @brief Starts the SDIO clock and sets it to init mode (400kHz or less).
102  *
103  * @param[in] sdcp pointer to the @p SDCDriver object
104  *
105  * @notapi
106  */
108 
109  (void)sdcp;
110 }
111 
112 /**
113  * @brief Sets the SDIO clock to data mode (25MHz or less).
114  *
115  * @param[in] sdcp pointer to the @p SDCDriver object
116  * @param[in] clk the clock mode
117  *
118  * @notapi
119  */
121 
122  (void)sdcp;
123  (void)clk;
124 }
125 
126 /**
127  * @brief Stops the SDIO clock.
128  *
129  * @param[in] sdcp pointer to the @p SDCDriver object
130  *
131  * @notapi
132  */
134 
135  (void)sdcp;
136 }
137 
138 /**
139  * @brief Switches the bus to 4 bits mode.
140  *
141  * @param[in] sdcp pointer to the @p SDCDriver object
142  * @param[in] mode bus mode
143  *
144  * @notapi
145  */
147 
148  (void)sdcp;
149 
150  switch (mode) {
151  case SDC_MODE_1BIT:
152 
153  break;
154  case SDC_MODE_4BIT:
155 
156  break;
157  case SDC_MODE_8BIT:
158 
159  break;
160  default:
161  osalDbgAssert(false, "invalid bus mode");
162  break;
163  }
164 }
165 
166 /**
167  * @brief Sends an SDIO command with no response expected.
168  *
169  * @param[in] sdcp pointer to the @p SDCDriver object
170  * @param[in] cmd card command
171  * @param[in] arg command argument
172  *
173  * @notapi
174  */
175 void sdc_lld_send_cmd_none(SDCDriver *sdcp, uint8_t cmd, uint32_t arg) {
176 
177  (void)sdcp;
178  (void)cmd;
179  (void)arg;
180 }
181 
182 /**
183  * @brief Sends an SDIO command with a short response expected.
184  * @note The CRC is not verified.
185  *
186  * @param[in] sdcp pointer to the @p SDCDriver object
187  * @param[in] cmd card command
188  * @param[in] arg command argument
189  * @param[out] resp pointer to the response buffer (one word)
190  *
191  * @return The operation status.
192  * @retval HAL_SUCCESS operation succeeded.
193  * @retval HAL_FAILED operation failed.
194  *
195  * @notapi
196  */
197 bool sdc_lld_send_cmd_short(SDCDriver *sdcp, uint8_t cmd, uint32_t arg,
198  uint32_t *resp) {
199 
200  (void)sdcp;
201  (void)cmd;
202  (void)arg;
203  (void)resp;
204 
205  return HAL_SUCCESS;
206 }
207 
208 /**
209  * @brief Sends an SDIO command with a short response expected and CRC.
210  *
211  * @param[in] sdcp pointer to the @p SDCDriver object
212  * @param[in] cmd card command
213  * @param[in] arg command argument
214  * @param[out] resp pointer to the response buffer (one word)
215  *
216  * @return The operation status.
217  * @retval HAL_SUCCESS operation succeeded.
218  * @retval HAL_FAILED operation failed.
219  *
220  * @notapi
221  */
222 bool sdc_lld_send_cmd_short_crc(SDCDriver *sdcp, uint8_t cmd, uint32_t arg,
223  uint32_t *resp) {
224 
225  (void)sdcp;
226  (void)cmd;
227  (void)arg;
228  (void)resp;
229 
230  return HAL_SUCCESS;
231 }
232 
233 /**
234  * @brief Sends an SDIO command with a long response expected and CRC.
235  *
236  * @param[in] sdcp pointer to the @p SDCDriver object
237  * @param[in] cmd card command
238  * @param[in] arg command argument
239  * @param[out] resp pointer to the response buffer (four words)
240  *
241  * @return The operation status.
242  * @retval HAL_SUCCESS operation succeeded.
243  * @retval HAL_FAILED operation failed.
244  *
245  * @notapi
246  */
247 bool sdc_lld_send_cmd_long_crc(SDCDriver *sdcp, uint8_t cmd, uint32_t arg,
248  uint32_t *resp) {
249 
250  (void)sdcp;
251  (void)cmd;
252  (void)arg;
253  (void)resp;
254 
255  return HAL_SUCCESS;
256 }
257 
258 /**
259  * @brief Reads one or more blocks.
260  *
261  * @param[in] sdcp pointer to the @p SDCDriver object
262  * @param[in] startblk first block to read
263  * @param[out] buf pointer to the read buffer
264  * @param[in] n number of blocks to read
265  *
266  * @return The operation status.
267  * @retval HAL_SUCCESS operation succeeded.
268  * @retval HAL_FAILED operation failed.
269  *
270  * @notapi
271  */
272 bool sdc_lld_read(SDCDriver *sdcp, uint32_t startblk,
273  uint8_t *buf, uint32_t n) {
274 
275  (void)sdcp;
276  (void)startblk;
277  (void)buf;
278  (void)n;
279 
280  return HAL_SUCCESS;
281 }
282 
283 /**
284  * @brief Writes one or more blocks.
285  *
286  * @param[in] sdcp pointer to the @p SDCDriver object
287  * @param[in] startblk first block to write
288  * @param[out] buf pointer to the write buffer
289  * @param[in] n number of blocks to write
290  *
291  * @return The operation status.
292  * @retval HAL_SUCCESS operation succeeded.
293  * @retval HAL_FAILED operation failed.
294  *
295  * @notapi
296  */
297 bool sdc_lld_write(SDCDriver *sdcp, uint32_t startblk,
298  const uint8_t *buf, uint32_t n) {
299 
300  (void)sdcp;
301  (void)startblk;
302  (void)buf;
303  (void)n;
304 
305  return HAL_SUCCESS;
306 }
307 
308 /**
309  * @brief Waits for card idle condition.
310  *
311  * @param[in] sdcp pointer to the @p SDCDriver object
312  *
313  * @return The operation status.
314  * @retval HAL_SUCCESS the operation succeeded.
315  * @retval HAL_FAILED the operation failed.
316  *
317  * @api
318  */
319 bool sdc_lld_sync(SDCDriver *sdcp) {
320 
321  (void)sdcp;
322 
323  return HAL_SUCCESS;
324 }
325 
326 #endif /* HAL_USE_SDC == TRUE */
327 
328 /** @} */
bool sdc_lld_sync(SDCDriver *sdcp)
Waits for card idle condition.
Definition: hal_sdc_lld.c:319
bool sdc_lld_send_cmd_short_crc(SDCDriver *sdcp, uint8_t cmd, uint32_t arg, uint32_t *resp)
Sends an SDIO command with a short response expected and CRC.
Definition: hal_sdc_lld.c:222
bool sdc_lld_send_cmd_short(SDCDriver *sdcp, uint8_t cmd, uint32_t arg, uint32_t *resp)
Sends an SDIO command with a short response expected.
Definition: hal_sdc_lld.c:197
HAL subsystem header.
void sdc_lld_stop_clk(SDCDriver *sdcp)
Stops the SDIO clock.
Definition: hal_sdc_lld.c:133
bool sdc_lld_send_cmd_long_crc(SDCDriver *sdcp, uint8_t cmd, uint32_t arg, uint32_t *resp)
Sends an SDIO command with a long response expected and CRC.
Definition: hal_sdc_lld.c:247
void sdc_lld_start(SDCDriver *sdcp)
Configures and activates the SDC peripheral.
Definition: hal_sdc_lld.c:79
SDCDriver SDCD1
SDCD1 driver identifier.
Definition: hal_sdc_lld.c:41
void sdc_lld_init(void)
Low level SDC driver initialization.
Definition: hal_sdc_lld.c:65
void sdcObjectInit(SDCDriver *sdcp)
Initializes the standard part of a SDCDriver structure.
Definition: hal_sdc.c:554
void sdc_lld_set_data_clk(SDCDriver *sdcp, sdcbusclk_t clk)
Sets the SDIO clock to data mode (25MHz or less).
Definition: hal_sdc_lld.c:120
void sdc_lld_send_cmd_none(SDCDriver *sdcp, uint8_t cmd, uint32_t arg)
Sends an SDIO command with no response expected.
Definition: hal_sdc_lld.c:175
sdcbusclk_t
Max supported clock.
Definition: hal_sdc.h:131
bool sdc_lld_write(SDCDriver *sdcp, uint32_t startblk, const uint8_t *buf, uint32_t n)
Writes one or more blocks.
Definition: hal_sdc_lld.c:297
sdcbusmode_t
Type of SDIO bus mode.
Definition: hal_sdc.h:122
bool sdc_lld_read(SDCDriver *sdcp, uint32_t startblk, uint8_t *buf, uint32_t n)
Reads one or more blocks.
Definition: hal_sdc_lld.c:272
Structure representing an SDC driver.
Definition: hal_sdc_lld.h:113
#define osalDbgAssert(c, remark)
Condition assertion.
Definition: osal.h:258
void sdc_lld_start_clk(SDCDriver *sdcp)
Starts the SDIO clock and sets it to init mode (400kHz or less).
Definition: hal_sdc_lld.c:107
void sdc_lld_set_bus_mode(SDCDriver *sdcp, sdcbusmode_t mode)
Switches the bus to 4 bits mode.
Definition: hal_sdc_lld.c:146
void sdc_lld_stop(SDCDriver *sdcp)
Deactivates the SDC peripheral.
Definition: hal_sdc_lld.c:93