Exemplo n.º 1
0
//#endif
int Mem_Check(unsigned long offset)
{	
	static rt_uint16_t test_data[2] = { 0x55AA, 0xAA55 };
	rt_uint16_t tmp = 0x3C3C;
	int ret = 1;

	if (offset<PSRAM_CY) {
		Mem_Wr ( test_data[0], offset);
		Mem_Rd ( &tmp, offset);
		if (tmp != test_data[0])
			ret = 0;
		Mem_Wr ( test_data[1], offset);
		Mem_Rd ( &tmp, offset);
		if (tmp != test_data[1])
			ret = 0;
	}

	return (ret);
}
Exemplo n.º 2
0
static rt_err_t nand_mtd_read(
		struct rt_mtd_nand_device * dev,
		rt_off_t page,
		rt_uint8_t * data, rt_uint32_t data_len, //may not always be 2048
		rt_uint8_t * spare, rt_uint32_t spare_len)
{
	rt_err_t result=RT_EOK;
	int i;
	rt_mutex_take(&nand, RT_WAITING_FOREVER);
	if (data != RT_NULL && data_len != 0)
	{	
	    // get offset of sst39vf's read position
	    	
		rt_uint32_t page_offs = page*512;
		if(data_len>512 && data_len<=528)
		{
            	//read back both main data and spare data 
			rt_uint32_t spare_offs = page*16 + NOR_SPARE_BLOCK;
			for(i=0;i<256;i++)
				Mem_Rd((rt_uint16_t *)data+i,page_offs+i);
			for(i=0;i<(data_len-512)/2;i++)
				Mem_Rd((rt_uint16_t *)data+256+i,spare_offs+i);
		}
		else
		{
			for(i=0;i<data_len/2;i++)
				Mem_Rd((rt_uint16_t *)data+i,page_offs+i);
		}
	}

	
	if (spare != RT_NULL && spare_len != 0)
	{
		rt_uint32_t spare_offs = page*16 + NOR_SPARE_BLOCK;
		for(i=0;i<spare_len/2;i++)
			Mem_Rd((rt_uint16_t *)spare+i,spare_offs+i);
	}	
	rt_mutex_release(&nand);

	return result;
}
Exemplo n.º 3
0
static rt_err_t nand_mtd_check_block(
		struct rt_mtd_nand_device* device,
		rt_uint32_t block)
{
	rt_err_t result=RT_EOK;	
	rt_uint16_t bad;
	rt_uint32_t spare_offs = NOR_SPARE_BLOCK+block*32;
	rt_mutex_take(&nand, RT_WAITING_FOREVER);		
	Mem_Rd(&bad,spare_offs);
	rt_mutex_release(&nand);
	return ((bad&0xff)==0xff) ? RT_EOK:RT_ERROR;
}