/*----------------------------------------------------------------------------/ / FatFs - FAT file system module R0.09a (C)ChaN, 2012 /-----------------------------------------------------------------------------/ / FatFs module is a generic FAT file system module for small embedded systems. / This is a free software that opened for education, research and commercial / developments under license policy of following terms. / / Copyright (C) 2012, ChaN, all right reserved. / / * The FatFs module is a free software and there is NO WARRANTY. / * No restriction on use. You can use, modify and redistribute it for / personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. / * Redistributions of source code must retain the above copyright notice. / /-----------------------------------------------------------------------------/ / Feb 26,'06 R0.00 Prototype. / / Apr 29,'06 R0.01 First stable version. / / Jun 01,'06 R0.02 Added FAT12 support. / Removed unbuffered mode. / Fixed a problem on small (<32M) partition. / Jun 10,'06 R0.02a Added a configuration option (_FS_MINIMUM). / / Sep 22,'06 R0.03 Added f_rename(). / Changed option _FS_MINIMUM to _FS_MINIMIZE. / Dec 11,'06 R0.03a Improved cluster scan algorithm to write files fast. / Fixed f_mkdir() creates incorrect directory on FAT32. / / Feb 04,'07 R0.04 Supported multiple drive system. / Changed some interfaces for multiple drive system. / Changed f_mountdrv() to f_mount(). / Added f_mkfs(). / Apr 01,'07 R0.04a Supported multiple partitions on a physical drive. / Added a capability of extending file size to f_lseek(). / Added minimization level 3. / Fixed an endian sensitive code in f_mkfs(). / May 05,'07 R0.04b Added a configuration option _USE_NTFLAG. / Added FSInfo support. / Fixed DBCS name can result FR_INVALID_NAME. / Fixed short seek (<= csize) collapses the file object. / / Aug 25,'07 R0.05 Changed arguments of f_read(), f_write() and f_mkfs(). / Fixed f_mkfs() on FAT32 creates incorrect FSInfo. / Fixed f_mkdir() on FAT32 creates incorrect directory. / Feb 03,'08 R0.05a Added f_truncate() and f_utime(). / Fixed off by one error at FAT sub-type determination. / Fixed btr in f_read() can be mistruncated. / Fixed cached sector is not flushed when create and close without write. / / Apr 01,'08 R0.06 Added fputc(), fputs(), fprintf() and fgets(). / Improved performance of f_lseek() on moving to the same or following cluster. / / Apr 01,'09 R0.07 Merged Tiny-FatFs as a configuration option. (_FS_TINY) / Added long file name feature. / Added multiple code page feature. / Added re-entrancy for multitask operation. / Added auto cluster size selection to f_mkfs(). / Added rewind option to f_readdir(). / Changed result code of critical errors. / Renamed string functions to avoid name collision. / Apr 14,'09 R0.07a Separated out OS dependent code on reentrant cfg. / Added multiple sector size feature. / Jun 21,'09 R0.07c Fixed f_unlink() can return FR_OK on error. / Fixed wrong cache control in f_lseek(). / Added relative path feature. / Added f_chdir() and f_chdrive(). / Added proper case conversion to extended char. / Nov 03,'09 R0.07e Separated out configuration options from ff.h to ffconf.h. / Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH. / Fixed name matching error on the 13 char boundary. / Added a configuration option, _LFN_UNICODE. / Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. / / May 15,'10 R0.08 Added a memory configuration option. (_USE_LFN = 3) / Added file lock feature. (_FS_SHARE) / Added fast seek feature. (_USE_FASTSEEK) / Changed some types on the API, XCHAR->TCHAR. / Changed fname member in the FILINFO structure on Unicode cfg. / String functions support UTF-8 encoding files on Unicode cfg. / Aug 16,'10 R0.08a Added f_getcwd(). (_FS_RPATH = 2) / Added sector erase feature. (_USE_ERASE) / Moved file lock semaphore table from fs object to the bss. / Fixed a wrong directory entry is created on non-LFN cfg when the given name contains ';'. / Fixed f_mkfs() creates wrong FAT32 volume. / Jan 15,'11 R0.08b Fast seek feature is also applied to f_read() and f_write(). / f_lseek() reports required table size on creating CLMP. / Extended format syntax of f_printf function. / Ignores duplicated directory separators in given path name. / / Sep 06,'11 R0.09 f_mkfs() supports multiple partition to finish the multiple partition feature. / Added f_fdisk(). (_MULTI_PARTITION = 2) / Aug 27,'12 R0.09a Fixed assertion failure due to OS/2 EA on FAT12/16 volume. / Changed f_open() and f_opendir reject null object pointer to avoid crash. / Changed option name _FS_SHARE to _FS_LOCK. /---------------------------------------------------------------------------*/ #include "ff.h" /* FatFs configurations and declarations */ #include "diskio.h" /* Declarations of low level disk I/O functions */ /*-------------------------------------------------------------------------- Module Private Definitions ---------------------------------------------------------------------------*/ #if _FATFS != 4004 /* Revision ID */ #error Wrong include file (ff.h). #endif /* Definitions on sector size */ #if _MAX_SS != 512 && _MAX_SS != 1024 && _MAX_SS != 2048 && _MAX_SS != 4096 #error Wrong sector size. #endif #if _MAX_SS != 512 #define SS(fs) ((fs)->ssize) /* Variable sector size */ #else #define SS(fs) 512U /* Fixed sector size */ #endif /* Reentrancy related */ #if _FS_REENTRANT #if _USE_LFN == 1 #error Static LFN work area must not be used in re-entrant configuration. #endif #define ENTER_FF(fs) { if (!lock_fs(fs)) return FR_T
/*
LUFA Library
Copyright (C) Dean Camera, 2017.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
without fee, provided that the above copyright notice appear in
all copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of the author not be used in
advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
The author disclaims all warranties with regard to this
software, including all implied warranties of merchantability
and fitness. In no event shall the author be liable for any
special, indirect or consequential damages or any damages
whatsoever resulting from loss of use, data or profits, whether
in an action of contract, negligence or other tortious action,
arising out of or in connection with the use or performance of
this software.
*/
/** \file
*
* Header file for TINYNVM.c.
*/
#ifndef _TINY_NVM_
#define _TINY_NVM_
/* Includes: */
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include <LUFA/Common/Common.h>
#include "XPROGProtocol.h"
#include "XPROGTarget.h"
#include "Config/AppConfig.h"
/* Preprocessor Checks: */
#if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1))
#undef ENABLE_ISP_PROTOCOL
#if !defined(ENABLE_XPROG_PROTOCOL)
#define ENABLE_XPROG_PROTOCOL
#endif
#endif
/* Defines: */
#define TINY_NVM_CMD_NOOP 0x00
#define TINY_NVM_CMD_CHIPERASE 0x10
#define TINY_NVM_CMD_SECTIONERASE 0x14
#define TINY_NVM_CMD_WORDWRITE 0x1D
/* Function Prototypes: */
bool TINYNVM_WaitWhileNVMBusBusy(void);
bool TINYNVM_WaitWhileNVMControllerBusy(void);
bool TINYNVM_EnableTPI(void);
void TINYNVM_DisableTPI(void);
bool TINYNVM_ReadMemory(const uint16_t ReadAddress,
uint8_t* ReadBuffer,
uint16_t ReadLength);
bool TINYNVM_WriteMemory(const uint16_t WriteAddress,
uint8_t* WriteBuffer,
uint16_t WriteLength);
bool TINYNVM_EraseMemory(const uint8_t EraseCommand,
const uint16_t Address);
#if (defined(INCLUDE_FROM_TINYNVM_C) && defined(ENABLE_XPROG_PROTOCOL))
static void TINYNVM_SendReadNVMRegister(const uint8_t Address);
static void TINYNVM_SendWriteNVMRegister(const uint8_t Address);
static void TINYNVM_SendPointerAddress(const uint16_t AbsoluteAddress);
#endif
#endif