Fix for occasional freakouts on mass storage writes.

Upstream's edge-detect interrupt that starts SPI transmission was not
firing. Sometimes. On some boards only. The cause was Downstream not
allowing enough time between edges for Upstream to catch the signal.

Also misc code tidyups.
pull/7/head
Robert Fisk 7 years ago
parent 61df3e14e6
commit 835c54f480

@ -66,48 +66,48 @@
#define HID_MIN_POLL 10
#define HID_MAX_REPORT_SIZE 8
#define HID_MAX_USAGE 10
#define HID_MAX_NBR_REPORT_FMT 10
#define HID_QUEUE_SIZE 10
#define HID_ITEM_LONG 0xFE
#define HID_ITEM_TYPE_MAIN 0x00
#define HID_ITEM_TYPE_GLOBAL 0x01
#define HID_ITEM_TYPE_LOCAL 0x02
#define HID_ITEM_TYPE_RESERVED 0x03
#define HID_MAIN_ITEM_TAG_INPUT 0x08
#define HID_MAIN_ITEM_TAG_OUTPUT 0x09
#define HID_MAIN_ITEM_TAG_COLLECTION 0x0A
#define HID_MAIN_ITEM_TAG_FEATURE 0x0B
#define HID_MAIN_ITEM_TAG_ENDCOLLECTION 0x0C
#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0x00
#define HID_GLOBAL_ITEM_TAG_LOG_MIN 0x01
#define HID_GLOBAL_ITEM_TAG_LOG_MAX 0x02
#define HID_GLOBAL_ITEM_TAG_PHY_MIN 0x03
#define HID_GLOBAL_ITEM_TAG_PHY_MAX 0x04
#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 0x05
#define HID_GLOBAL_ITEM_TAG_UNIT 0x06
#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 0x07
#define HID_GLOBAL_ITEM_TAG_REPORT_ID 0x08
#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 0x09
#define HID_GLOBAL_ITEM_TAG_PUSH 0x0A
#define HID_GLOBAL_ITEM_TAG_POP 0x0B
#define HID_LOCAL_ITEM_TAG_USAGE 0x00
#define HID_LOCAL_ITEM_TAG_USAGE_MIN 0x01
#define HID_LOCAL_ITEM_TAG_USAGE_MAX 0x02
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 0x03
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MIN 0x04
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAX 0x05
#define HID_LOCAL_ITEM_TAG_STRING_INDEX 0x07
#define HID_LOCAL_ITEM_TAG_STRING_MIN 0x08
#define HID_LOCAL_ITEM_TAG_STRING_MAX 0x09
#define HID_LOCAL_ITEM_TAG_DELIMITER 0x0A
#define HID_MAX_NBR_REPORT_FMT 10
//#define HID_QUEUE_SIZE 10
//
//#define HID_ITEM_LONG 0xFE
//
//#define HID_ITEM_TYPE_MAIN 0x00
//#define HID_ITEM_TYPE_GLOBAL 0x01
//#define HID_ITEM_TYPE_LOCAL 0x02
//#define HID_ITEM_TYPE_RESERVED 0x03
//
//
//#define HID_MAIN_ITEM_TAG_INPUT 0x08
//#define HID_MAIN_ITEM_TAG_OUTPUT 0x09
//#define HID_MAIN_ITEM_TAG_COLLECTION 0x0A
//#define HID_MAIN_ITEM_TAG_FEATURE 0x0B
//#define HID_MAIN_ITEM_TAG_ENDCOLLECTION 0x0C
//
//
//#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0x00
//#define HID_GLOBAL_ITEM_TAG_LOG_MIN 0x01
//#define HID_GLOBAL_ITEM_TAG_LOG_MAX 0x02
//#define HID_GLOBAL_ITEM_TAG_PHY_MIN 0x03
//#define HID_GLOBAL_ITEM_TAG_PHY_MAX 0x04
//#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 0x05
//#define HID_GLOBAL_ITEM_TAG_UNIT 0x06
//#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 0x07
//#define HID_GLOBAL_ITEM_TAG_REPORT_ID 0x08
//#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 0x09
//#define HID_GLOBAL_ITEM_TAG_PUSH 0x0A
//#define HID_GLOBAL_ITEM_TAG_POP 0x0B
//
//
//#define HID_LOCAL_ITEM_TAG_USAGE 0x00
//#define HID_LOCAL_ITEM_TAG_USAGE_MIN 0x01
//#define HID_LOCAL_ITEM_TAG_USAGE_MAX 0x02
//#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 0x03
//#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MIN 0x04
//#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAX 0x05
//#define HID_LOCAL_ITEM_TAG_STRING_INDEX 0x07
//#define HID_LOCAL_ITEM_TAG_STRING_MIN 0x08
//#define HID_LOCAL_ITEM_TAG_STRING_MAX 0x09
//#define HID_LOCAL_ITEM_TAG_DELIMITER 0x0A
#define HID_REPORT_DIRECTION_IN 0x01

@ -289,9 +289,7 @@ void Downstream_SPIProcess(void)
{
return;
}
SpiInterruptCompleted = 0;
UPSTREAM_TX_REQUEST_DEASSERT;
if (DownstreamInterfaceState >= DOWNSTREAM_INTERFACE_ERROR)
{
@ -407,6 +405,7 @@ void Downstream_SPIProcess(void)
//a transmit-only DMA transfer with CRC! (it does not clear RXNE flag on request)
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
{
UPSTREAM_TX_REQUEST_DEASSERT;
SpiInterruptCompleted = 1;
}

@ -234,6 +234,7 @@ HAL_StatusTypeDef Upstream_TransmitPacket(UpstreamPacketTypeDef* packetToWrite)
//We TxRx our outgoing packet because the SPI hardware freaks out if we only Tx it :-/
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
{
UNUSED(hspi);
SpiPacketReceivedCallbackTypeDef tempPacketCallback;
UpstreamPacketTypeDef* tempPacketToFree;
@ -522,6 +523,7 @@ void Upstream_BeginReceivePacketBody(void)
//Something bad happened! Possibly CRC error...
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi)
{
UNUSED(hspi);
SpiPacketReceivedCallbackTypeDef tempPacketCallback;
if (UpstreamInterfaceState >= UPSTREAM_INTERFACE_ERROR)

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="ilg.gnuarmeclipse.debug.gdbjtag.openocd.launchConfigurationType">
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.PERIPHERALS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;peripherals&gt;&#10;&lt;peripheral name=&quot;DMA2&quot;/&gt;&#10;&lt;peripheral name=&quot;GPIOA&quot;/&gt;&#10;&lt;/peripherals&gt;&#10;"/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.PERIPHERALS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;peripherals&gt;&#10;&lt;peripheral name=&quot;GPIOA&quot;/&gt;&#10;&lt;peripheral name=&quot;EXTI&quot;/&gt;&#10;&lt;/peripherals&gt;&#10;"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doContinue" value="true"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doDebugInRam" value="false"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doFirstReset" value="true"/>

Loading…
Cancel
Save