98 Commits

Author SHA1 Message Date
Keir Fraser
45821dee07 New intrinsic "unreachable()" to indicate unreachable code points
This allows better compiler optimisation, while also including an
ASSERT() for debug builds.

Refs #7
2024-11-03 10:26:15 +00:00
Keir Fraser
8b8d4a61cf WRITE_FLUX: Hard-sector index detection
Expected sector timing is specified to the WRITE_FLUX command. This
allows detection of short sector times, which indicate the true
track start ("track index"). This allows write cueing as for
soft-sectored disks.
2024-09-28 00:58:30 +01:00
Keir Fraser
5b0857791f New delay parameter: index_mask
Allows configuration of post-trigger INDEX mask time in microseconds
(0-65535). Some drives may need much longer than the default, if
there is sensor-switch bounce on trailing edge of the INDEX pulse.

Fixes keirf/greaseweazle#7
2024-09-24 18:38:36 +01:00
Keir Fraser
d45f4243f2 Implement asynchronous operation delays between seek/head/read/write
Also implement the pre- and post-write delays required by many floppy
drive specs.

Refs keirf/greaseweazle#491
2024-09-23 12:23:41 +01:00
Keir Fraser
c5b6894a64 CMD_GET_INFO: New field 'usb_buf_kb' 2023-08-17 17:09:44 +01:00
Keir Fraser
34daf529c7 Allow 16-bit cylinder number. 2023-08-16 19:56:34 +01:00
Keir Fraser
1a35995046 AT32F403A: Extend SRAM to 224kB 2023-08-16 19:56:22 +01:00
Keir Fraser
80b899925c AT32F4: Support new board V4.1 2023-07-21 11:01:58 +01:00
Keir Fraser
ee02a86e80 time: Proactive pull from FlashFloppy for 32-bit timebase update period
Make the period proportional to systick rate by updating the timebase
every 2^23 systicks. This will always be safe, no matter how high the
systick rate.
2023-07-14 14:24:03 +01:00
Keir Fraser
09f777ea49 AT32F403A: Run main firmware at 216MHz. Clock USB from auto-calibrated HSI clock. 2023-01-05 10:30:42 +00:00
Keir Fraser
eef5390657 Define AHB, APB1, APB2 bus speeds as numeric constants for all supported chips. 2022-11-14 16:56:57 +00:00
Keir Fraser
89c67939b6 at32f4: Make the f4.h header file stand alone. 2022-11-14 16:46:29 +00:00
Keir Fraser
fd07efedcf GETINFO_FIRMWARE: Return MCU information 2022-07-18 10:29:43 +01:00
Keir Fraser
b593fa973c Reserve BUSTYPE ID 3 for Adafruit_Floppy project 2022-04-19 21:30:45 +01:00
Keir Fraser
04343e64e3 GET_INFO: New subtypes GET_DRIVE and GET_CURRENT_DRIVE 2022-02-26 15:48:09 +00:00
Keir Fraser
a938da99ac intrinsics: Remove unused definitions 2021-11-11 08:39:34 +00:00
Keir Fraser
08916f8129 STM32F1, AT32F4: Dynamic USB buffer sizing.
Also tweak firmware update with useful error messages if updates
don't fit in SRAM (bootloader updates) or Flash (main firmware updates).
2021-10-04 10:35:09 +01:00
Keir Fraser
ec553a0d4e Support new board V4 Slim 2021-08-12 13:35:28 +01:00
Keir Fraser
7fca1c9315 Implement 64:32->32 division and use it to avoid arithmetic overflow in time_from_samples() 2021-07-20 14:32:01 +01:00
Keir Fraser
4b82ef4741 gw bandwidth: Check integrity of USB comms during bandwidth test. 2021-06-28 14:27:34 +01:00
Keir Fraser
b5a02294ce New board: F1 Plus (Unbuffered) 2021-06-27 19:18:17 +01:00
Keir Fraser
910a5635b4 AT32F415: Increase clock speed to 144MHz 2021-06-22 10:27:16 +01:00
Keir Fraser
5f05d8f487 AT32F403: Work around broken double-buffered endpoints using an ISR to
quickly post new buffers.
2021-06-22 09:51:58 +01:00
Keir Fraser
9dac3e110e AT32F403: Increase core clock speed to 144MHz. 2021-06-22 09:51:17 +01:00
Keir Fraser
c894f9f02b New firmware command CMD_NOCLICK_STEP. Used by WinUAE floppy bridge. 2021-06-09 15:54:17 +01:00
Keir Fraser
9846c544f6 testmode: Add a WDAT oscillation test 2021-05-12 10:50:59 +01:00
Keir Fraser
2f7b96f718 testmode: Add a test-headers command 2021-05-12 09:30:51 +01:00
Keir Fraser
6f4c89f735 AT32F4: Identify MCU and board at startup, blink a fail code on error.
Insert required delays for F403 clock bringup.
'gw info' now identifies V4 boards by name.
2021-05-11 10:02:05 +01:00
Keir Fraser
4b82a229b1 AT32F4: Support both AT32F403 and AT32F415 2021-05-10 15:40:32 +01:00
Keir Fraser
c6e86add16 F1: Introduce new submodel "F1 Plus" 2021-05-01 16:11:03 +01:00
Keir Fraser
d5c0650df4 Implement a test mode for F7 (v3, Lightning Plus) and AT32F4xx models. 2021-05-01 09:01:03 +01:00
Keir Fraser
001cf97ca8 AT32Fxx: Implement firmware update 2021-04-29 10:53:11 +01:00
Keir Fraser
a2085a96d5 AT32F415: Port floppy interface 2021-04-29 09:23:15 +01:00
Keir Fraser
cfa91ce5f1 Initial port of Greaseweazle to AT32F415. 2021-04-27 15:11:16 +01:00
Keir Fraser
2809d34c28 Rearrange MCU namespace so that STM32 is one subtype.
This will allow fitting AT32 alongside, which is an "almost" STM32 clone
with a slightly different and confusing naming scheme.
2021-04-27 15:11:16 +01:00
Keir Fraser
fb93abea9e New firmware command CMD_GET_PIN to read an interface pin's voltage level. 2021-04-26 12:26:30 +01:00
Keir Fraser
bfb167b2a0 f7: Support new submodel: v3 "Thunderbolt" 2021-03-26 09:54:49 +00:00
Keir Fraser
f8176f1029 Fix documentation of erase_flux command in the protocol header file. 2021-03-03 16:11:00 +00:00
Keir Fraser
de9c26d23f Rename auto_off -> watchdog 2021-02-23 10:02:48 +00:00
Keir Fraser
2b78b953b7 ReadFlux: Allow max_index_post_ticks to be specified by the host.
Also: Improve USB protocol docs.
2021-02-22 15:37:55 +00:00
Keir Fraser
f8e7484233 Support new board F7 Slim 2021-01-13 09:51:21 +00:00
Keir Fraser
b28157d4c5 Rename side -> head all the way down into firmware. 2020-12-10 16:03:57 +00:00
Keir Fraser
b69b4cdef1 Read and Write Flux commands are extended.
1. Read flux can be terminated on a number of ticks as well as number of IDX.
2. Write flux can be started immediately rather than index cued.
2020-12-05 17:52:45 +00:00
Keir Fraser
3276cf7c38 f7: Flash status LED if external oscillator doesn't start. 2020-12-03 16:39:36 +00:00
Keir Fraser
b7ddee0bda Support flippy drive access to cylinder -8 2020-11-19 08:49:33 +00:00
Keir Fraser
419df4825a usb: Define new astable write region and use it to move NFA logic onto the host.
The write protocol handling is reworked on the firmware side.
2020-10-27 12:58:12 +00:00
Keir Fraser
0f78a93f66 Rename FLUXOP_NOFLUX -> FLUXOP_SPACE 2020-10-27 09:51:16 +00:00
Keir Fraser
e7062e3ad8 usb: Send periodic noflux opcodes during long periods of no flux.
This new no-flux opcode replaces the long-flux opcode:
 long-flux = no-flux + regular-flux
Also rearrange the code a bit to avoid repetition.
2020-10-21 12:38:46 +01:00
Keir Fraser
9b4b69da85 usb: Place index timings in-band within the flux read stream.
This removes the low limit on max index timings per read request.
2020-10-21 10:29:51 +01:00
Keir Fraser
73c3875252 Support F7 Lightniung Plus board. 2020-08-23 17:49:54 +01:00