⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ata2.h

📁 Utils and test SD card read write cycles
💻 H
📖 第 1 页 / 共 2 页
字号:
#define PHYS_WRITE                  1
#define PHYS_ERASE                  2
#define RESET                       3
#define RESET_AND_LOAD              4
#define READ_ANCHOR_SECTOR          5
#define WRITE_ANCHOR_SECTOR         6
#define READ_PHYS_LONG              7
#define READ_PHYS_LONG_NO_ECC       8
#define READ_LOG_LONG               9
#define READ_LOG_LONG_NO_ECC       10
#define WRITE_PHYS_LONG            11
#define WRITE_PHYS_LONG_NO_ECC     12
#define WRITE_LOG_LONG             13
#define WRITE_LOG_LONG_NO_ECC      14
#define READ_DEVICE_ID_FIRM        15
#define READ_FIRMWARE_VERSION      16
#define READ_UNUSED_BUFFER_BLOCKS  17
#define READ_TEST_REG              18
#define WRITE_TEST_REG             19
#define CALCULATE_FIRMWARE_CRC     20
#define LOG_TO_PHYSICAL            21
#define RESOLVE_TWINS              22
#define FLUSH_IP_CACHE             23

#define ACMD45                    100
#define ACMD46                    101
#define ACMD47                    102
#define ACMD48                    103

/*--------------------------------------------------------------------------*/
/* Preformat definitions                                                    */
/*--------------------------------------------------------------------------*/

#define ANCHOR_PROGRAM_SIZE         248

// Preformat OpCodes Not present in Firmware
#define READ_DEVICE_ID          5
#define TEST_CARD               6
#define TEST_BUS                7
#define PREFORMAT_CARD          8
#define GET_PARAMETER_BUFFER    8
#define READ_DEFECT_TABLE       9
#define READ_ERROR_REG          10
#define PREF_READ_PHYS          11
#define READ_PHYS_LONG_PREF     12
#define PHYS_ERASE_PREF         13
#define WRITE_SECTOR            14

#define INT1             7

#define DeviceIdOffset        0
#define DeviceSerialOffset    4
#define ErrorRegOffset        508
#define NumberOfChipsOffset   4

#define FEATURE_16BIT               (1<<0) // Features of FlashChip
#define NUMBER_OF_DEFECTBLOCK_SECTORS 4
typedef struct
{
  unsigned short int DeviceId[16];  // different MAX_CHIPS for .b9 files
  unsigned short int ErrorCode[16]; // but only one MAX_CHIPS for Newfmt
  unsigned short int Offset[16];
  unsigned char  IsByte[16];
  unsigned char  ShouldBeByte[16];
} TestBusParameterType;

extern unsigned char GlobalSectorBuffer[SECTOR_SIZE];
#define Set16BitMode()  UpdateMCR(0, (1<<4)+(1<<23))
#define Set8BitMode()   UpdateMCR((1<<4)+(1<<23), 0)

/*--------------------------------------------------------------------------*/
/* Variables                                                                */
/*--------------------------------------------------------------------------*/

extern unsigned char CommandCode, MinorCommandCode;
extern unsigned char FirmwareVersion[12];
extern unsigned char EnableVendorCommands;

/*--------------------------------------------------------------------------*/
/* Function Prototypes                                                      */
/*--------------------------------------------------------------------------*/

extern void StartWriteCommand();
extern void PcmciaInterruptEntry();
extern void MainLoop();
extern void SendCSD(unsigned int *Buffer);
extern void SendCID(unsigned int *Buffer);
extern void SendOCR(unsigned int OCR);
extern void TransferToFPGA(unsigned int *Buffer);
extern void TransferFromFPGA(unsigned int *Buffer);
extern void SetSupervisorMode();
void InitCode();
extern unsigned int FmtInitCode();
extern void LoadOverlay(unsigned char *OverlayPtr,
                        unsigned int BlockNumber,
			unsigned int OverlaySize);
extern unsigned int FillHyperstoneBuffer(unsigned int SectorCount);
extern unsigned int FillHostBuffer();
extern unsigned int WaitDRQ(unsigned int SectorCount);
extern unsigned int PartialReadSectors(unsigned int LogSectorNumber,
				       unsigned int SectorCount,
				       unsigned int SectorOffset,
				       unsigned int SectorLength);
extern unsigned int ReadSectors(unsigned int LogSectorNumber,
				unsigned int SectorCount);
#if 1 //def CPRM
extern unsigned int WriteSectors(unsigned int LogSectorNumber,
				 unsigned int SectorCount,
				 unsigned int Mode);
#else
extern unsigned int WriteSectors(unsigned int LogSectorNumber,
				 unsigned int SectorCount);
#endif
#define ERASE_REQUEST  (1<<1)
#define EraseSectors(a, b) WriteSectors(a, b, ERASE_REQUEST)
//extern unsigned int EraseSectors(unsigned int LogSectorNumber,
				 //unsigned int NumberOfSectors);
extern void CheckWearLeveling();
extern void BackGroundEraseAndSleep(unsigned int Event);
extern void BeginOfInitOverlay();
extern void EndOfInitOverlay();
extern void BeginOfOverlay();
extern void SetErrorCode(unsigned int ErrorCode);
extern unsigned int GetEraseSectorNumber();
extern unsigned int GetEraseSectorCount();
extern unsigned int GetSectorNumber();
extern unsigned int GetSectorCount();
extern unsigned int GetSectorOffset();
extern unsigned int GetSectorLength();
extern unsigned int IsWriteProtected();
extern unsigned int ShiftSectorBuffer(unsigned int offset);
extern unsigned int GetSectorsInEraseBlockMMC(unsigned int *CSD);
extern unsigned int GetSectorsInEraseBlockSD(unsigned int *CSD);
extern void PrintTable();
extern unsigned int WriteCSD(unsigned int *CSD);
extern void WaitAndSetOCR();
extern ReadWriteProtectBits(unsigned int LogSectorNumber);
extern void WriteProtectTransAction(unsigned int LogSectorNumber,
				    unsigned int Set);
extern void SetBuffer (void *dbuf, unsigned int value, unsigned int length);
extern void EndOfWearLeveling();
#if ROM_ACTIVE
extern void SendMMC(unsigned int MMC);
#endif
extern unsigned int clock();
extern unsigned int EraseBlockRom(unsigned int SectorNumber,
				  unsigned int Flags);
extern void SetBuffer (void *dbuf, unsigned int value, unsigned int length);
extern void CopyBuffer (void *dbuf, void *sbuf, unsigned int length);
extern unsigned int FillHostBufferRom();
extern unsigned int GetSectorsPerBlock();
extern void GetDefectBlock(unsigned char * Buffer, unsigned int Position);
extern void WriteToSectorBuffer(unsigned char *Buf);
extern void ConvParameterBuffer(unsigned char *Buf);
extern unsigned int PreformatCard(unsigned int QuickFlag);
extern unsigned int WriteFirmware();
extern unsigned int WriteAnchorSectorLib();
extern unsigned int WriteLongLib(unsigned int MinorCommandCode,
                                 unsigned int SectorNumber);
extern void ReadUnusedBufferBlocksLib();
extern unsigned int ReadLongLib(unsigned int MinorCommandCode,
                                unsigned int SectorNumber);
extern unsigned int ReadAnchorSectorLib();
extern void SendSectorBuffer();
extern void GetSectorBuffer();
extern void WaitUntillNoReset();
extern void SendSCR(unsigned int *SCR);
extern unsigned int ReadDeviceID(unsigned int SectorNumber);
extern unsigned char DeviceId1, DeviceId2, DeviceId3, DeviceIdAddress;
extern void SendStatus(unsigned int status);
extern void NewInterrupt();
extern void SendStatus(unsigned int status);
extern unsigned int CheckOTPBits(unsigned int);
#ifdef CPRM
extern void ReadMUK(unsigned char MKBNumber); 
extern unsigned int WriteMUKs(unsigned int *MUKs, 
                              unsigned int *c1, 
                              unsigned int *c2);
extern unsigned int PreformatWriteMKB(unsigned int Argument);
extern void EraseLogBlocks(unsigned int Start, unsigned int NumberOfSectors);
extern unsigned int UpdateMKB(unsigned int Step, unsigned int SectorCount);
#endif
extern unsigned int VendorCommands(unsigned int SectorNumber,
			           unsigned int MinorCommandCode);
extern unsigned int CalcCSizeMult(unsigned int LastSectorNumber);
extern unsigned int TestRegisterRead(unsigned int Address);
extern unsigned int TestRegisterWrite(unsigned int Address,
                                      unsigned int Data);
extern unsigned int WriteSectorLogToFlash(unsigned int SectorNumber, 
                                          unsigned int  InSecureArea);

extern void ResolveAllTwins(unsigned int FromFlushIPCache);
extern unsigned int LogToPhys1(unsigned int LogSectorNumber, unsigned int Opcode);
extern void WritePBlockTables();
extern void FlushIPCache(void);
extern unsigned short CalculateFirmwareCRC();

extern void WaitUntilAllChipsIdle();
extern void EnterSleepMode(unsigned int WakeEvent);
/*--------------------------------------------------------------------------*/
/* I/O Macros, Other Macros                                                 */
/*--------------------------------------------------------------------------*/


#define   inp8(portid)                            \
({                                                \
register unsigned int dummy;                      \
						  \
  asm volatile  ("LDW.IOA   0, %0, %1"            \
		 : "=r" (dummy)                   \
                 : "i"  (portid));                \
  dummy;                                          \
})

#define   inp8r(portid)                            \
({                                                \
register unsigned int dummy;                      \
                                                  \
  asm volatile  ("LDW.IOD   %1, %0, 0"            \
                 : "=r" (dummy)                   \
                 : "r"  (portid));                \
  dummy;                                          \
})

#define   outpw0(portid)                        \
    asm volatile  ("STW.IOA   0, 0, %0" : : "i"  (portid));

#define  outpw2(portid, value)                    \
{                                                 \
register unsigned int dummy;                      \
						  \
  dummy  = value;                                 \
  asm volatile  ("STW.IOA   0, %1, %0"            \
		 :  : "i"  (portid), "r" (dummy));\
}

#define  outpw2r(portid, value)                    \
{                                                 \
register unsigned int dummy;                      \
						  \
  dummy  = value;                                 \
  asm volatile  ("STW.IOD   %0, %1, 0"            \
		 :  : "r"  (portid), "r" (dummy));\
}

#define RESET_CARD(ResetType)                      \
({  register long dummy asm("L15");                \
						   \
   dummy = (long)ResetType;                        \
   asm volatile ("trap 62"                         \
                 : /* no outputs */                \
                 : "l" (dummy)                     \
                 : "L15");                         \
})


#define DISABLE_INT1()    UpdateFCR(1<<28, 0)
#define ENABLE_INT1()     UpdateFCR(1<<24, 1<<28)

#define GET_COMMAND_CODE()      CommandCode
#define GET_MINOR_COMMANDCODE() MinorCommandCode
#define WRITE_PROTECTED(csd)    ((csd[0] & (3 << 12)) != 0)

#define SET_WRITEPROT()   UpdateFCR((1<<4) , (1<<5)|(1<<6))
#define CLEAR_WRITEPROT() UpdateFCR((1<<5)|(1<<4), (1<<6))

#define CHIP_AND_BLOCK_NUMBER(SectorNumber)  ((SectorNumber) >> SECTOR_BITS)
#define WRITE_BACK_PTR(x,y)    x &= 0x0000ffffL, x |= (y)<<16


#define ClearLockFlag() asm volatile ("ANDNI  SR, 1 << 15" :  : )
#define SetLockFlag()   asm volatile ("ORI    SR, 1 << 15" :  : )

#define FLASH_IDLE (0x800ffff0+(1<<22))

#define OVERLAPPED              (1<<0)
#define WITH_ECC                (1<<1)
#if defined(NORTK)
#define WriteSectorToFlash(SectorNumber,Buffer, Overhead) \
	WriteSector(SectorNumber,Buffer,ChunkTab,         \
	WITH_ECC|OVERLAPPED|SkipProgram,Overhead)
#define	EraseBlock(SectorNumber) EraseBlockRom(SectorNumber,OVERLAPPED|SkipErase)
#else
#define WriteSectorToFlash(SectorNumber,Buffer, Overhead) \
	WriteSector(SectorNumber,Buffer,ChunkTab,WITH_ECC|SkipProgram,Overhead)
#define	EraseBlock(SectorNumber) EraseBlockRom(SectorNumber,SkipErase)
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -