查看: 7070|回复: 2

[提问] stm32F407 fsmc接DM9000A,读取不到ID。求助!

[复制链接]
发表于 2012-5-11 11:55:58 | 显示全部楼层 |阅读模式
关键词: ID
CS# <-> FSMC_NE1 CMD<-> FSMC_A16
LOW#<-> FSMC_NWE
LOR#<-> FSMC_NOE

SD0-SD15<-> FSMC_D0-FSMC_D15
void FSMC_SRAM_Init(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
  GPIO_InitTypeDef GPIO_InitStructure;
   /* Enable GPIOs clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE, ENABLE);
   
   /* Enable FSMC clock */
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
/*-- GPIOs Configuration -----------------------------------------------------*/
/*
+-------------------+--------------------+------------------+------------------+
+                       SRAM pins assignment                                   +
+-------------------+--------------------+------------------+------------------+
| PD0  <-> FSMC_D2       |// PE0  <-> FSMC_NBL0  |   
| PD1  <-> FSMC_D3       | //PE1  <-> FSMC_NBL1  |  
| //PD3  <-> FSMC_CLK    | //PE2  <-> FSMC_A23   |
| PD4  <-> FSMC_NOE     | //PE3  <-> FSMC_A19    |
| PD5  <-> FSMC_NWE    | //PE4  <-> FSMC_A20    |
| //PD6  <-> FSMC_NWAIT | //PE5  <-> FSMC_A21  |
| PD7  <-> FSMC_NE1     | //PE6  <-> FSMC_A22    |
| PD8  <-> FSMC_D13     | PE7   <-> FSMC_D4       |  
| PD9  <-> FSMC_D14     | PE8   <-> FSMC_D5       |
| PD10 <-> FSMC_D15    | PE9   <-> FSMC_D6       |
| PD11 <-> FSMC_A16    | PE10 <-> FSMC_D7        |
| //PD12 <-> FSMC_A17    | PE11 <-> FSMC_D8      |  
| //PD13 <-> FSMC_A18    | PE12 <-> FSMC_D9      |
| PD14 <-> FSMC_D0     |  PE13 <-> FSMC_D10      |
| PD15 <-> FSMC_D1     | PE14 <-> FSMC_D11       |
| //PB7   <-> FSMC_NL     | PE15 <-> FSMC_D12     |
+-------------------+--------------------+
*/
  
/*-- GPIO Configuration ------------------------------------------------------*/


/* GPIOD configuration */
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
                               GPIO_Pin_7  |  GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |
                               GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;


  GPIO_Init(GPIOD, &GPIO_InitStructure);


  /* GPIOE configuration */
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC);


  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7  | GPIO_Pin_8  | GPIO_Pin_9  | GPIO_Pin_10 |
                                GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
                                GPIO_Pin_15;


  GPIO_Init(GPIOE, &GPIO_InitStructure);


  
/*-- FSMC Configuration ------------------------------------------------------*/
  p.FSMC_AddressSetupTime = 0;
  p.FSMC_AddressHoldTime = 0;
  p.FSMC_DataSetupTime = 2;
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_A;


  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;


  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);


  /* Enable FSMC Bank1_SRAM1 Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  
}










k= (*(__IO uint16_t*)(0x60000028));   

k|= (*(__IO uint16_t*)(0x60000028))<<8;  

k|= (*(__IO uint16_t*)(0x60000028))<<16;  

k|= (*(__IO uint16_t*)(0x60000028))<<24;  


发表于 2012-5-15 17:39:04 | 显示全部楼层
读不到ID,说明和处理器的通讯都还不正常。可以先检查电源,看芯片是否都已经正常工作,然后再检查通讯问题。
发表于 2012-11-29 11:54:56 | 显示全部楼层
确认bus时序是否正确,读写数据时address & data 对应的CMD信号是否正确?


深圳市侨峰科技有限公司 (DAVICOM中国区总代理)
嵌入式以太网络接口芯片供应商,软件及硬件设计服务与咨询
联络方式:Jonny.chu@qftek.com  电话:13554902206
DM9000A  DM9000C  DM9161A  DM9161C DM8203 DM9620 DM9162N
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表