📄 mstick.h
字号:
/*
* File : MStick.h
*/
#ifndef __MSTICK_H__
#define __MSTICK_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "def.h"
void Init_Mstick_Host(unsigned int Mstick_Freq);
void Init_IrDA_Mstick_Irq(void);
void Irq_Mstick_Dma(void);
void Init_Mstick_Txdma(void);
void Init_Mstick_Rxdma(void);
void __irq Dma_P_Irq(void);
void Ms_GPIO_Initial(void);
void Ch29_MEMORY_STICK(void);
void Test_Ms_Rw(void);
void Test_Ms_Block_Read(void);
void Test_Ms_Block_Write(void);
void Test_Ms_Block_Erase(void);
void Test_Ms_Page_Read(void);
void Test_Ms_Page_Write(void);
void Test_Ms_Status_Read(void);
void Test_Ms_Status_Write(void);
void Test_Ms_Extra_Read(void);
void Test_Ms_Extra_Write(void);
void Test_Ms_Dma_Rw(void);
void Test_Ms_Page_Dma_Write(void);
void Test_Ms_Page_Dma_Read(void);
void Test_R_W_Hard(void);
void Ms_Reset(void);
void Ms_Attr_Read(void);
int Ms_Page_Write(unsigned int Block_Addr, unsigned int Page_Addr, unsigned char *Write_Buffer);
void Ms_Page_Read(unsigned int Block_Addr, unsigned int Page_Addr, unsigned char *Status_Buffer, unsigned char *Read_Buffer);
void Ms_Extra_Read(unsigned int Block_Addr, unsigned char Page_Addr, unsigned char *Buffer);
void Ms_Extra_Write(unsigned int Block_Addr, unsigned char Page_Addr, unsigned char *Buffer);
void Ms_Block_Erase(unsigned int Block_Addr);
int Ms_Page_Write_Dma(unsigned int Block_Addr, unsigned int Page_Addr, unsigned char *Write_Buffer);
void Ms_Page_Read_Dma(unsigned int Block_Addr, unsigned int Page_Addr, unsigned char *Status_Buffer, unsigned char *Read_Buffer);
void Write_Mstick_Format_Data(void);
int Ms_Fmt_Page_Write(unsigned int Block_Addr, unsigned int Page_Addr, unsigned char *Write_Buffer, unsigned char *Extra_Buffer);
int Mstpc_Write_Extra_Reg(unsigned char *Buffer);
int Mstpc_Set_Command(unsigned char Command);
unsigned short Mstpc_Get_Int(int num, unsigned char End_Command);
int Mstpc_Write_Rw_Reg_Addr(unsigned char Read_Addr, unsigned char Read_Size, unsigned char Write_Addr, unsigned char Write_Size);
int Mstpc_Write_Param_Reg(unsigned int Block_Addr, unsigned char Sys_Param, unsigned char Page_Addr, unsigned char Cmd_Param);
int Mstpc_Write_Status_Reg(unsigned char Status_Addr, unsigned char Status_Size, unsigned char *Buffer);
int Mstpc_Read_Status_Reg(unsigned char Status_Addr, unsigned char Status_Size, unsigned char *Buffer);
int Check_Wp(void);
// Irq functions.
void __irq IrDA_Mstick_Irq(void);
void Mstick_Sub_Irq(void);
void IrDA_Sub_Irq(void);
void Tr_Irq(void);
void Stick_Ins_Irq(void);
void PrintSubMessage(void);
// System Parameter value.
#define PARAM_BAMD (1<<7) // Block Address MoDe
#define PARAM_ATEN (1<<6) // ATtribute rom ENable
// MSPRECON Register Bit(0x167B_0000)
#define CLK_EN (0x1<<2)
//Status0[0] is WP bit
#define STATUS_WP (1<<0)
// INT_ENCON Register Bit(0x167B_0004)
#define DISABLE (0x0)
#define ENABLE (0x1)
#define ONEPAGE_SIZE (512) // 1 page = 256 Bytes
#define STATUS_SIZE 9 // 1 page = 10 Bytes
#define ATTR_SIZE 512 // cis data = 256 Bytes
#define EXTRA_SIZE (9) // 9bytes
#define EXTRA_REG_START (0x16)
#define CHKSUM_SIZE (2) // 9bytes
#define CHKSUM_REG_START (EXTRA_REG_START+4) // Extra register5,4: reserved area.
// TPC(Transfer Protocol Command)
#define READ_PAGE_DATA (0x2<<12)
#define READ_REG (0x4<<12)
#define GET_INT (0x7<<12)
#define WRITE_PAGE_DATA (0xD<<12)
#define WRITE_REG (0xB<<12)
#define SET_RW_REG_ADDRS (0x8<<12)
#define SET_CMD (0xE<<12)
// INT signal desription
#define INT_CED (1<<7)
#define INT_ERR (1<<6)
#define INT_BREQ (1<<5)
#define INT_CMDNK (1<<0)
#define B_AREA (0)
#define DE_AREA (0x1<<5)
#define E_AREA (0x2<<5)
#define OVE_AREA (0x4<<5)
// INT_TPC timeout count
#define TIME_OUT 10000
// CTRL_STATUS Register Bit(0x167B_8004)
#define INTSTATUS (rCTRL_STA & 0x80)
#define DRQSTATUS (rCTRL_STA & 0x40)
#define RBE (rCTRL_STA & 0x8)
#define RBF (rCTRL_STA & 0x4)
#define TBE (rCTRL_STA & 0x2)
#define TBF (rCTRL_STA & 0x1)
#define INT_STA (1<<7)
#define DRQ_STA (1<<6)
#define RBE_STA (1<<3)
#define RBF_STA (1<<2)
#define TBE_STA (1<<1)
#define TBF_STA (1<<0)
//#define INT_P_END (0x80)
#define INT_P_END (rINTCTRL_STA & 0x80)
#define INT_SIF (0x40)
#define INT_DRQ (0x20)
#define INT_PIN (0x10)
#define INT_CRC (0x2)
#define INT_TOE (0x1)
// Error code
#define NO_ERROR 0
#define DATA_READ_ERROR 1
#define DATA_WRITE_ERROR 2
#define PAGE_ERASE_ERROR 3
#define REG_READ_ERROR 4
#define REG_WRITE_ERROR 5
// Memory stick command definition
// Memory stick Function CMD
#define MS_RESET 0x3c
#define MS_SLEEP 0x5a
#define MS_CLEAR_BUF 0xc3
// Memory stick Flash CMD
#define BLOCK_READ 0xaa
#define BLOCK_WRITE 0x55
#define BLOCK_END 0x33
#define BLOCK_ERASE 0x99
#define FLASH_STOP 0xcc
#ifdef __cplusplus
}
#endif
#endif /* __MSTICK_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -