MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / _send_cmd

Function _send_cmd

components/drivers/spi/dev_spi_msd.c:137–268  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

135}
136
137static rt_err_t _send_cmd(
138 struct rt_spi_device *device,
139 uint8_t cmd,
140 uint32_t arg,
141 uint8_t crc,
142 response_type type,
143 uint8_t *response
144)
145{
146 struct rt_spi_message message;
147 uint8_t cmd_buffer[8];
148 uint8_t recv_buffer[sizeof(cmd_buffer)];
149 uint32_t i;
150
151 cmd_buffer[0] = DUMMY;
152 cmd_buffer[1] = (cmd | 0x40);
153 cmd_buffer[2] = (uint8_t)(arg >> 24);
154 cmd_buffer[3] = (uint8_t)(arg >> 16);
155 cmd_buffer[4] = (uint8_t)(arg >> 8);
156 cmd_buffer[5] = (uint8_t)(arg);
157
158 if (crc == 0x00)
159 {
160 crc = crc7(&cmd_buffer[1], 5);
161 crc = (crc << 1) | 0x01;
162 }
163 cmd_buffer[6] = (crc);
164
165 cmd_buffer[7] = DUMMY;
166
167 /* initial message */
168 message.send_buf = cmd_buffer;
169 message.recv_buf = recv_buffer;
170 message.length = sizeof(cmd_buffer);
171 message.cs_take = message.cs_release = 0;
172
173 _wait_ready(device);
174
175 /* transfer message */
176 device->bus->ops->xfer(device, &message);
177
178 for (i = CARD_NCR; i < (CARD_NCR_MAX + 1); i++)
179 {
180 uint8_t send = DUMMY;
181
182 /* initial message */
183 message.send_buf = &send;
184 message.recv_buf = response;
185 message.length = 1;
186 message.cs_take = message.cs_release = 0;
187
188 /* transfer message */
189 device->bus->ops->xfer(device, &message);
190
191 if (0 == (response[0] & 0x80))
192 {
193 break;
194 }

Callers 5

rt_msd_initFunction · 0.85
rt_msd_readFunction · 0.85
rt_msd_sdhc_readFunction · 0.85
rt_msd_writeFunction · 0.85
rt_msd_sdhc_writeFunction · 0.85

Calls 5

crc7Function · 0.85
_wait_readyFunction · 0.85
rt_tick_getFunction · 0.85
rt_tick_timeoutFunction · 0.85
rt_tick_from_millisecondFunction · 0.85

Tested by

no test coverage detected