/** Total number of allowable ISP programming speeds supported by the device */\r
#define TOTAL_ISP_PROGRAMMING_SPEEDS 7\r
\r
+ /** Timeout in milliseconds of target busy-wait loops waiting for a command to complete */\r
+ #define TARGET_BUSY_TIMEOUT_MS 100\r
+\r
/* Function Prototypes: */\r
- uint8_t ISPTarget_GetSPIPrescalerMask(void);\r
- void ISPTarget_ChangeTargetResetLine(const bool ResetTarget);\r
- uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint16_t PollAddress,\r
- const uint8_t PollValue, const uint8_t DelayMS,\r
- const uint8_t ReadMemCommand);\r
- uint8_t ISPTarget_WaitWhileTargetBusy(void);\r
- void ISPTarget_LoadExtendedAddress(void);\r
+ uint8_t ISPTarget_GetSPIPrescalerMask(void);\r
+ void ISPTarget_ChangeTargetResetLine(const bool ResetTarget);\r
+ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint16_t PollAddress,\r
+ const uint8_t PollValue, const uint8_t DelayMS,\r
+ const uint8_t ReadMemCommand);\r
+ uint8_t ISPTarget_WaitWhileTargetBusy(void);\r
+ void ISPTarget_LoadExtendedAddress(void);\r
\r
#endif\r
#define ENABLE_PDI_PROTOCOL\r
#endif\r
#endif\r
-\r
+ \r
/* Macros: */\r
#define XPRG_CMD_ENTER_PROGMODE 0x01\r
#define XPRG_CMD_LEAVE_PROGMODE 0x02\r
#define BITBANG_PDICLOCK_MASK RESET_LINE_MASK\r
#endif\r
\r
+ /** Total number of bits in a single USART frame */\r
#define BITS_IN_PDI_FRAME 12\r
\r
- #define PDI_NVM_TIMEOUT_MS 200\r
+ /** Timeout in milliseconds of a PDI busy-wait command */\r
+ #define PDI_NVM_TIMEOUT_MS 100\r
\r
#define PDI_CMD_LDS 0x00\r
#define PDI_CMD_LD 0x20\r
\r
#if defined(ENABLE_TPI_PROTOCOL) || defined(__DOXYGEN__)\r
\r
-/** Sends the given NVM register address to the target.\r
- *\r
- * \param[in] Register NVM register whose absolute address is to be sent\r
- */\r
-void TINYNVM_SendNVMRegAddress(const uint8_t Register)\r
-{\r
- // TODO\r
-}\r
-\r
-/** Sends the given 32-bit absolute address to the target.\r
- *\r
- * \param[in] AbsoluteAddress Absolute address to send to the target\r
- */\r
-void TINYNVM_SendAddress(const uint32_t AbsoluteAddress)\r
-{\r
- // TODO\r
-}\r
-\r
-/** Waits while the target's NVM controller is busy performing an operation, exiting if the\r
- * timeout period expires.\r
- *\r
- * \return Boolean true if the NVM controller became ready within the timeout period, false otherwise\r
- */\r
-bool TINYNVM_WaitWhileNVMControllerBusy(void)\r
-{\r
- // TODO\r
- return false;\r
-}\r
-\r
-/** Retrieves the CRC value of the given memory space.\r
- *\r
- * \param[in] CRCCommand NVM CRC command to issue to the target\r
- * \param[out] CRCDest CRC Destination when read from the target\r
- *\r
- * \return Boolean true if the command sequence complete successfully\r
- */\r
-bool TINYNVM_GetMemoryCRC(const uint8_t CRCCommand, uint32_t* const CRCDest)\r
-{\r
- // TODO\r
- return true;\r
-}\r
-\r
-/** Reads memory from the target's memory spaces.\r
- *\r
- * \param[in] ReadAddress Start address to read from within the target's address space\r
- * \param[out] ReadBuffer Buffer to store read data into\r
- * \param[in] ReadSize Number of bytes to read\r
- *\r
- * \return Boolean true if the command sequence complete successfully\r
- */\r
-bool TINYNVM_ReadMemory(const uint32_t ReadAddress, uint8_t* ReadBuffer, const uint16_t ReadSize)\r
-{\r
- // TODO\r
- return true;\r
-}\r
-\r
-/** Writes byte addressed memory to the target's memory spaces.\r
- *\r
- * \param[in] WriteCommand Command to send to the device to write each memory byte\r
- * \param[in] WriteAddress Start address to write to within the target's address space\r
- * \param[in] WriteBuffer Buffer to source data from\r
- *\r
- * \return Boolean true if the command sequence complete successfully\r
- */\r
-bool TINYNVM_WriteByteMemory(const uint8_t WriteCommand, const uint32_t WriteAddress, const uint8_t* WriteBuffer)\r
-{\r
- // TODO\r
- return true;\r
-}\r
-\r
-/** Writes page addressed memory to the target's memory spaces.\r
- *\r
- * \param[in] WriteBuffCommand Command to send to the device to write a byte to the memory page buffer\r
- * \param[in] EraseBuffCommand Command to send to the device to erase the memory page buffer\r
- * \param[in] WritePageCommand Command to send to the device to write the page buffer to the destination memory\r
- * \param[in] PageMode Bitfield indicating what operations need to be executed on the specified page\r
- * \param[in] WriteAddress Start address to write the page data to within the target's address space\r
- * \param[in] WriteBuffer Buffer to source data from\r
- * \param[in] WriteSize Number of bytes to write\r
- *\r
- * \return Boolean true if the command sequence complete successfully\r
- */\r
-bool TINYNVM_WritePageMemory(const uint8_t WriteBuffCommand, const uint8_t EraseBuffCommand,\r
- const uint8_t WritePageCommand, const uint8_t PageMode, const uint32_t WriteAddress,\r
- const uint8_t* WriteBuffer, const uint16_t WriteSize)\r
-{\r
- // TODO\r
- return true;\r
-}\r
-\r
-/** Erases a specific memory space of the target.\r
- *\r
- * \param[in] EraseCommand NVM erase command to send to the device\r
- * \param[in] Address Address inside the memory space to erase\r
- *\r
- * \return Boolean true if the command sequence complete successfully\r
- */\r
-bool TINYNVM_EraseMemory(const uint8_t EraseCommand, const uint32_t Address)\r
-{\r
- // TODO\r
- return true;\r
-}\r
+// TODO\r
\r
#endif\r
\r
#include <LUFA/Common/Common.h>\r
\r
+ #include "TPIProtocol.h"\r
#include "TPITarget.h"\r
\r
/* Preprocessor Checks: */\r
#endif\r
\r
/* Defines: */\r
- #define TINY_NVM_BUSY_TIMEOUT_MS 200\r
-\r
- /* Function Prototypes: */\r
- void TINYNVM_SendNVMRegAddress(const uint8_t Register);\r
- void TINYNVM_SendAddress(const uint32_t AbsoluteAddress);\r
- bool TINYNVM_WaitWhileNVMControllerBusy(void);\r
- bool TINYNVM_GetMemoryCRC(const uint8_t CRCCommand, uint32_t* const CRCDest);\r
- bool TINYNVM_ReadMemory(const uint32_t ReadAddress, uint8_t* ReadBuffer, const uint16_t ReadSize);\r
- bool TINYNVM_WriteByteMemory(const uint8_t WriteCommand, const uint32_t WriteAddress, const uint8_t* WriteBuffer);\r
- bool TINYNVM_WritePageMemory(const uint8_t WriteBuffCommand, const uint8_t EraseBuffCommand,\r
- const uint8_t WritePageCommand, const uint8_t PageMode, const uint32_t WriteAddress,\r
- const uint8_t* WriteBuffer, const uint16_t WriteSize);\r
- bool TINYNVM_EraseMemory(const uint8_t EraseCommand, const uint32_t Address);\r
+ #define TINY_NVM_BUSY_TIMEOUT_MS 100\r
\r
#endif\r
#define BITBANG_TPICLOCK_PIN PINB\r
#define BITBANG_TPICLOCK_MASK (1 << 1)\r
\r
+ /** Total number of bits in a single USART frame */\r
#define BITS_IN_TPI_FRAME 12\r
\r
- #define TPI_NVM_TIMEOUT_MS 200\r
+ /** Timeout in milliseconds of a PDI busy-wait command */\r
+ #define TPI_NVM_TIMEOUT_MS 100\r
\r
#define TPI_CMD_SLD 0x20\r
#define TPI_CMD_SST 0x60\r
/* Macros: */\r
/** Programmer ID string, returned to the host during the CMD_SIGN_ON command processing */
- #define PROGRAMMER_ID "AVRISP_MK2"\r
-\r
- /** Timeout in milliseconds of target busy-wait loops waiting for a command to complete */\r
- #define TARGET_BUSY_TIMEOUT_MS 240
+ #define PROGRAMMER_ID "AVRISP_MK2"\r
\r
/* External Variables: */\r
extern uint32_t CurrentAddress;\r
- extern bool MustSetAddress;\r
+ extern bool MustSetAddress;\r
\r
/* Function Prototypes: */\r
void V2Protocol_ProcessCommand(void);\r
{\r
{ .ParamID = PARAM_BUILD_NUMBER_LOW,\r
.ParamValue = (LUFA_VERSION_INTEGER >> 8),\r
- .ParamPrivileges = PARAM_PRIV_READ },\r
+ .ParamPrivileges = PARAM_PRIV_READ },\r
\r
{ .ParamID = PARAM_BUILD_NUMBER_HIGH,\r
.ParamValue = (LUFA_VERSION_INTEGER & 0xFF),\r
- .ParamPrivileges = PARAM_PRIV_READ },\r
+ .ParamPrivileges = PARAM_PRIV_READ },\r
\r
{ .ParamID = PARAM_HW_VER,\r
.ParamValue = 0x00,\r
- .ParamPrivileges = PARAM_PRIV_READ },\r
+ .ParamPrivileges = PARAM_PRIV_READ },\r
\r
{ .ParamID = PARAM_SW_MAJOR,\r
.ParamValue = 0x01,\r
- .ParamPrivileges = PARAM_PRIV_READ },\r
+ .ParamPrivileges = PARAM_PRIV_READ },\r
\r
{ .ParamID = PARAM_SW_MINOR,\r
- .ParamValue = 0x0C,\r
- .ParamPrivileges = PARAM_PRIV_READ },\r
+ .ParamValue = 0x0D,\r
+ .ParamPrivileges = PARAM_PRIV_READ },\r
\r
{ .ParamID = PARAM_VTARGET,\r
.ParamValue = 0x32,\r
- .ParamPrivileges = PARAM_PRIV_READ },\r
+ .ParamPrivileges = PARAM_PRIV_READ },\r
\r
{ .ParamID = PARAM_SCK_DURATION,\r
.ParamValue = (TOTAL_ISP_PROGRAMMING_SPEEDS - 1),\r
- .ParamPrivileges = PARAM_PRIV_READ | PARAM_PRIV_WRITE },\r
+ .ParamPrivileges = PARAM_PRIV_READ | PARAM_PRIV_WRITE },\r
\r
{ .ParamID = PARAM_RESET_POLARITY,\r
.ParamValue = 0x00,\r
- .ParamPrivileges = PARAM_PRIV_WRITE },\r
+ .ParamPrivileges = PARAM_PRIV_WRITE },\r
\r
{ .ParamID = PARAM_STATUS_TGT_CONN,\r
.ParamValue = 0x00,\r
- .ParamPrivileges = PARAM_PRIV_READ },\r
+ .ParamPrivileges = PARAM_PRIV_READ },\r
\r
{ .ParamID = PARAM_DISCHARGEDELAY,\r
.ParamValue = 0x00,\r
- .ParamPrivileges = PARAM_PRIV_WRITE },\r
+ .ParamPrivileges = PARAM_PRIV_WRITE },\r
};\r
\r
\r
if (ParamID == ParameterTable[TableIndex].ParamID)\r
return &ParameterTable[TableIndex];\r
}\r
- \r
+\r
return NULL;\r
}\r