mirror of
https://github.com/pine64/blisp.git
synced 2025-02-25 21:33:42 +00:00
Final support of flashing on macOS
For some reason, macOS have issues with USB CDC, surprisingly, CH340G convertor works just fine. But FTDI and Bouffalo's USB CDC didn't worked. Basically, without writing anything, we don't receive response from board. This was fixed by adding drain after writing BOUFALLOLABRESET handshake + adding drains after every commmand write. Also, for some reason, in USB CDC, the size of USB payload is limited, else it will fail.
This commit is contained in:
parent
3325f3725e
commit
cbac0733ee
@ -130,6 +130,10 @@ int32_t blisp_send_command(struct blisp_device* device,
|
|||||||
blisp_dlog("Received error or not written all data: %d", ret);
|
blisp_dlog("Received error or not written all data: %d", ret);
|
||||||
return BLISP_ERR_UNKNOWN;
|
return BLISP_ERR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
#ifdef __APPLE__
|
||||||
|
sp_drain(serial_port);
|
||||||
|
#endif
|
||||||
|
|
||||||
return BLISP_OK;
|
return BLISP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,6 +195,9 @@ int32_t blisp_device_handshake(struct blisp_device* device, bool in_ef_loader) {
|
|||||||
if (!in_ef_loader) {
|
if (!in_ef_loader) {
|
||||||
if (device->is_usb) {
|
if (device->is_usb) {
|
||||||
sp_blocking_write(serial_port, "BOUFFALOLAB5555RESET\0\0", 22, 100);
|
sp_blocking_write(serial_port, "BOUFFALOLAB5555RESET\0\0", 22, 100);
|
||||||
|
#ifdef __APPLE__
|
||||||
|
sp_drain(serial_port);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret = sp_blocking_write(serial_port, handshake_buffer, bytes_count, 500);
|
ret = sp_blocking_write(serial_port, handshake_buffer, bytes_count, 500);
|
||||||
@ -210,6 +217,7 @@ int32_t blisp_device_handshake(struct blisp_device* device, bool in_ef_loader) {
|
|||||||
return BLISP_OK;
|
return BLISP_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
blisp_dlog("Received no response from chip.");
|
blisp_dlog("Received no response from chip.");
|
||||||
return BLISP_ERR_NO_RESPONSE;
|
return BLISP_ERR_NO_RESPONSE;
|
||||||
|
@ -57,17 +57,23 @@ int32_t blisp_easy_load_segment_data(
|
|||||||
struct blisp_easy_transport* segment_transport,
|
struct blisp_easy_transport* segment_transport,
|
||||||
blisp_easy_progress_callback progress_callback) {
|
blisp_easy_progress_callback progress_callback) {
|
||||||
int32_t ret;
|
int32_t ret;
|
||||||
|
#ifdef __APPLE__
|
||||||
|
const uint16_t buffer_max_size = 252 * 16;
|
||||||
|
#else
|
||||||
|
const uint16_t buffer_max_size = 4092;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
uint32_t sent_data = 0;
|
uint32_t sent_data = 0;
|
||||||
uint32_t buffer_size = 0;
|
uint32_t buffer_size = 0;
|
||||||
uint8_t buffer[4092];
|
uint8_t buffer[buffer_max_size];
|
||||||
|
|
||||||
blisp_easy_report_progress(progress_callback, 0, segment_size);
|
blisp_easy_report_progress(progress_callback, 0, segment_size);
|
||||||
|
|
||||||
while (sent_data < segment_size) {
|
while (sent_data < segment_size) {
|
||||||
buffer_size = segment_size - sent_data;
|
buffer_size = segment_size - sent_data;
|
||||||
if (buffer_size > 4092) {
|
if (buffer_size > buffer_max_size) {
|
||||||
buffer_size = 4092;
|
buffer_size = buffer_max_size;
|
||||||
}
|
}
|
||||||
blisp_easy_transport_read(segment_transport, buffer,
|
blisp_easy_transport_read(segment_transport, buffer,
|
||||||
buffer_size); // TODO: Error Handling
|
buffer_size); // TODO: Error Handling
|
||||||
@ -319,15 +325,21 @@ int32_t blisp_easy_flash_write(struct blisp_device* device,
|
|||||||
uint32_t data_size,
|
uint32_t data_size,
|
||||||
blisp_easy_progress_callback progress_callback) {
|
blisp_easy_progress_callback progress_callback) {
|
||||||
int32_t ret;
|
int32_t ret;
|
||||||
|
#ifdef __APPLE__
|
||||||
|
const uint16_t buffer_max_size = 372 * 1;
|
||||||
|
#else
|
||||||
|
const uint16_t buffer_max_size = 2052;
|
||||||
|
#endif
|
||||||
|
|
||||||
uint32_t sent_data = 0;
|
uint32_t sent_data = 0;
|
||||||
uint32_t buffer_size = 0;
|
uint32_t buffer_size = 0;
|
||||||
uint8_t buffer[8184];
|
uint8_t buffer[buffer_max_size];
|
||||||
blisp_easy_report_progress(progress_callback, 0, data_size);
|
blisp_easy_report_progress(progress_callback, 0, data_size);
|
||||||
|
|
||||||
while (sent_data < data_size) {
|
while (sent_data < data_size) {
|
||||||
buffer_size = data_size - sent_data;
|
buffer_size = data_size - sent_data;
|
||||||
if (buffer_size > 2052) {
|
if (buffer_size > buffer_max_size) {
|
||||||
buffer_size = 2052;
|
buffer_size = buffer_max_size;
|
||||||
}
|
}
|
||||||
blisp_easy_transport_read(data_transport, buffer,
|
blisp_easy_transport_read(data_transport, buffer,
|
||||||
buffer_size); // TODO: Error Handling
|
buffer_size); // TODO: Error Handling
|
||||||
|
Loading…
Reference in New Issue
Block a user