|
问题一:W25Q32的驱动程序应该是没问题的,跨4K读写都是没问题的。可是接上FINSH后。
FINSH函数如下:
void spi_flash_test(uint32_t address, uint32_t size)
{
uint32_t i;
/**< 8bit test */
uint8_t write_buf[500]; //数值过大,FINSH出现错误 比如:2000
uint8_t read_buf [500]; //数值过大,FINSH出现错误
rt_kprintf("step: 1\n");
for(i=0; i<size/sizeof(uint8_t); i++)
{
write_buf = (uint8_t)i;
}
w25xx_write(address, write_buf, size);
w25xx_read(address, read_buf, size);
for(i=0; i<size/sizeof(uint8_t); i++)
{
if( write_buf != read_buf )
{
rt_kprintf("SPI Flash test fail @ 0x%08X\r\nsystem halt!!!!!",i);
while(1);
}
}
rt_kprintf("SPI Flash test pass!!\r\n");
}
FINSH_FUNCTION_EXPORT(spi_flash_test, spi_flash_test(0, 2000));
如果数组为500时,没问题
finsh>>spi_flash_test(4080, 400)
step: 1
SPI Flash test pass!!
1, 0x00000001
finsh>>
如果数组为2000时,出现如下问题:
\ | /
- RT - Thread Operating System
/ | \ 1.0.0 build Feb 13 2012
2006 - 2011 Copyright by rt-thread team
finsh>>SPI File System initialized!
TCP/IP initialized!
finsh>>spi_flash_test(0, 400)
psr: 0x80000200
pc: 0x00000000
lr: 0x00000df5
r12: 0x00000000
r03: 0x20001bf4
r02: 0xffffffff
r01: 0x00000000
r00: 0x20000bf4
hard fault on thread: tshell
thread pri status sp stack size max used left tick error
-------- ---- ------- ---------- ---------- ---------- ---------- ---
tcpip 0x0c suspend 0x000000a8 0x00000400 0x00000108 0x00000014 000
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 0xf5
问题二:radio驱动程序里使用里面使用了一个semaphore,应该放在哪个Read函数里面,是如何调度的,应该放在哪里。(第一次接触操作系统,以前跑的都是51)
我写的驱动
uint32_t w25xx_read(uint32_t pos, uint8_t* buffer, uint32_t size)
{
uint32_t index;
// spi_lock();
CS_LOW();
spi_write(W25XX_CMD_READ);
spi_write(pos >> 16 & 0xFF);
spi_write(pos >> 8 & 0xFF);
spi_write(pos & 0xFF);
for (index = 0; index < size; index++)
{
*buffer++ = spi_read();
}
CS_HIGH();
// spi_unlock();
return size;
}
static void read(uint32_t pos, uint8_t* buffer, uint32_t size)
{
spi_lock();
w25xx_read(pos, buffer, size);
spi_unlock();
}
static void write(uint32_t pos, const uint8_t* buffer, uint32_t size)
{
spi_lock();
w25xx_write(pos, buffer, size);
spi_unlock();
}
static rt_size_t w25xx_flash_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
{
read(pos, (uint8_t *)buffer, size);
return size;
}
问题三:RTT 1.0.0里面的文件系统,还需要设置哪些地方吗?
Device能挂上,可是FINSH里面测试,文件系统相关的操作都运行错误。应该是文件系统没跑起来。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|