You are here

S34ML01G1 -> NAND device not detecting in uboot & kernel? | Cypress Semiconductor

S34ML01G1 -> NAND device not detecting in uboot & kernel?

Summary: 20 Replies, Latest post by Bacem Daassi on 01 Dec 2016 03:37 AM PST
Verified Answers: 0
Last post
Log in to post new comments.
ganesh.b_1823111's picture
User
11 posts

Hi Guys,

We using S34ML01G100T1000 in our custom TI DM385 board. we using IPNC RDK3.8(kernel -> http://arago-project.org/git/projects/?p=linux-ipnc-rdk-dm81xx.git;a=sum...) & (uboot -> http://arago-project.org/git/projects/?p=u-boot-ipnc-rdk-dm81xx.git;a=su...) with kernel 2.6.37, i have checked support of dev_id & maf_id in nand_id.c file which is their but still, when i try to print maf_id & dev_id i'm getting 0x17 & 0x17. and i'm getting No NAND device found in uboot as well as kernel. does anyone knows what is the issue.

 

thanks & regards,

Ganesh

bacd's picture
Cypress Employee
12 posts

Hi Ganesh,

Sorry for our late response!

I think there must be something wrong with your board driver that configures the NAND controller and the NAND timings as well.

As you mentioned, the corresponding device ID is liste in "nand_ids.c". Please also make sure to enable the NAND drivers in both u-boot and Linux.

You could enable debugging in the NAND module "nand_base.c" by adding the following define:

#define debug printf

This will provide more details about the failure and we can then get a better understanding of what's going wrong.

Best regards,

Bacem Daassi

Cypress Applications Engineering

ganesh.b_1823111's picture
User
11 posts

Hi Bacem Daassi,

i have already added in many printf for debugging purpose, even i have added the line as you ask for it. but in my nand_base.c file no where it is using debug for printing. Daassi, My priority right now is to detect nand in uboot.

In u-boot, BOOTMODE[0]-BOOTMODE[4] -> determines NAND/SD Boot.

0x17 means SD Boot, 0x13 means NAND Boot.

As NAND flash is interface using GPMC, initial GPMC I/O lines are muxed with BOOTMODE lines.

So, BOOTMODE[2] decide NAND/SD Boot. If BTMODE[2] is connected to high it SD boot and connected to GND means NAND boot.

when i remove BTMODE[2] jumper i'm reading 0x13 value.

So, In short I'm not reading GPMC Data lines rather i'm reading BTMODE pins value.

We have one more board with x16 bit NAND, it got detected with same uboot which we are using for board with spansion nand flash. we checked CS0 line which connected to GND.

So can you tell what could be the reason for reading BTMODE values instead of GPMC datalines.

 

regards,

Ganesh

bacd's picture
Cypress Employee
12 posts

Hi Ganesh,

Would it possible for you to attach a logic analyzer to the flash signals to see whether the commands that are received by the NAND flash are correct or not? That way we can also check the used timings.

I read through the TI DM385 reference manual but couldn't find any hint about the error you were having.

Could you check the GPMC registers for correctness, e.g: GPMC_CONFIG1_i (DEVICETYPE, DEVICESIZE...)?

Please also double check the TI DM385 board driver in u-boot. There might something missing for treating x8 NAND flashes since you're saying that you have another 16-bit part that's working fine for you. The Cypress NAND flash you're using here is a x8 part.

Are you able to boot from both SD and NAND device? You might be running two different images in this case.

Best regards,

Bacem Daassi

Cypress Applications Engineering

ganesh.b_1823111's picture
User
11 posts

Hi Daassi,

Actually we don't have logic analyzer,

from uboot shell, GPMC_CONFIG Device type & size is correct,

GPMC_CONFIG1 -> 0x00000800

CONTROL_STATUS -> 0x00000317.

TI DM385 uses generic nand driver, I'm booting from SD card.

 

regards,

Ganesh

bacd's picture
Cypress Employee
12 posts

Hi Ganesh,

I was referring to the board driver and not to the NAND chip driver. The board driver is the one that sets up the timings and GPMC config.

Please double check all the GPMC registers as well.

Is the nand scan function in u-boot matching one of the device ID to the read device ID or is it exiting without finding any match?

We need more logs here to see what happens. A LA would have been the best option.

Best regards,

Bacem

ganesh.b_1823111's picture
User
11 posts

Hi Daassi,

Even i have checked timing values in GPMC_CONFIG register, it looks fine

arch/arm/include/asm/arch-ti81xx/mem.h

#define M_NAND_GPMC_CONFIG1    0x00000800     
#define M_NAND_GPMC_CONFIG2     0x00060600     
#define M_NAND_GPMC_CONFIG3     0x00060F01     
#define M_NAND_GPMC_CONFIG4     0x04010401     

#define M_NAND_GPMC_CONFIG5     0x00040506    
#define M_NAND_GPMC_CONFIG6     0x04000580     
#define M_NAND_GPMC_CONFIG7     0x00000008

arch/arm/cpu/arm_cortexa8/ti81xx/mem.c

in above file, GPMC_CONFIG register are set with certain delay. you can check here

http://arago-project.org/git/projects/?p=u-boot-ipnc-rdk-dm81xx.git;a=blob;f=arch/arm/cpu/arm_cortexa8/ti81xx/mem.c;h=f70a16043f37f83da758acd1da64a32da8a2521c;hb=HEAD

Is the nand scan function in u-boot matching one of the device ID to the read device ID or is it exiting without finding any match?

yes it is exiting because it is unable to match device id.

U-Boot 2010.06 (Nov 24 2016 - 09:38:50) DM385_CARDVR_3.50.00
DM385-GP rev 1.1
ARM clk: 720MHz
DDR clk: 533MHz
L3 clk: 200MHz
IVA clk: 290MHz
ISS clk: 400MHz
DSP Default OFF
DSS Default OFF
DRAM:  1 GiB
MMC:   : 0, ON-BOARD SDIO: 1
Using default environment

The 2nd stage U-Boot will now be auto-loaded
Please do not interrupt the countdown till DM385_IPNC prompt if 2nd stage is already flashed

reading u-boot.bin

206480 bytes read
## Starting application at 0x80800000 ...
U-Boot 2010.06 (Nov 24 2016 - 09:40:16) DM385_CARDVR_3.50.00
DM385-GP rev 1.1
ARM clk: 720MHz
DDR clk: 533MHz
L3 clk: 200MHz
IVA clk: 290MHz
ISS clk: 400MHz
DSP Default OFF
DSS Default OFF
I2C:   ready
DRAM:  1 GiB
NAND:  
nand_init_chip -> NAND base_addr-> 8000000
Searching for NAND device @ GPMC CS:0
HW ECC BCH8 Selected
DM385 -> ecc_size_config -> 81a000
DM385 -> ecc_config -> 11100
DM385 -> Busw: 0
DM385 -> nand_select_chip->0
DM385 : GPMC -> 810 CONTROL_STATUS -> 317
nand_get_flash_type: second ID read did not match 17,17 against 17,17
DM385 -> name NAND 16MiB 1,8V 8-bit id 33 against device_id 17 failed
DM385 -> name NAND 16MiB 3,3V 8-bit id 73 against device_id 17 failed
DM385 -> name NAND 16MiB 1,8V 16-bit id 43 against device_id 17 failed
DM385 -> name NAND 16MiB 3,3V 16-bit id 53 against device_id 17 failed
DM385 -> name NAND 32MiB 1,8V 8-bit id 35 against device_id 17 failed
DM385 -> name NAND 32MiB 3,3V 8-bit id 75 against device_id 17 failed
DM385 -> name NAND 32MiB 1,8V 16-bit id 45 against device_id 17 failed
DM385 -> name NAND 32MiB 3,3V 16-bit id 55 against device_id 17 failed
DM385 -> name NAND 64MiB 1,8V 8-bit id 36 against device_id 17 failed
DM385 -> name NAND 64MiB 3,3V 8-bit id 76 against device_id 17 failed
DM385 -> name NAND 64MiB 1,8V 16-bit id 46 against device_id 17 failed
DM385 -> name NAND 64MiB 3,3V 16-bit id 56 against device_id 17 failed
DM385 -> name NAND 128MiB 1,8V 8-bit id 78 against device_id 17 failed
DM385 -> name NAND 128MiB 1,8V 8-bit id 39 against device_id 17 failed
DM385 -> name NAND 128MiB 3,3V 8-bit id 79 against device_id 17 failed
DM385 -> name NAND 128MiB 1,8V 16-bit id 72 against device_id 17 failed
DM385 -> name NAND 128MiB 1,8V 16-bit id 49 against device_id 17 failed
DM385 -> name NAND 128MiB 3,3V 16-bit id 74 against device_id 17 failed
DM385 -> name NAND 128MiB 3,3V 16-bit id 59 against device_id 17 failed
DM385 -> name NAND 256MiB 3,3V 8-bit id 71 against device_id 17 failed
DM385 -> name NAND 64MiB 1,8V 8-bit id a2 against device_id 17 failed
DM385 -> name NAND 64MiB 3,3V 8-bit id f2 against device_id 17 failed
DM385 -> name NAND 64MiB 1,8V 16-bit id b2 against device_id 17 failed
DM385 -> name NAND 64MiB 3,3V 16-bit id c2 against device_id 17 failed
DM385 -> name NAND 128MiB 1,8V 8-bit id a1 against device_id 17 failed
DM385 -> name NAND 128MiB 3,3V 8-bit id f1 against device_id 17 failed
DM385 -> name NAND 128MiB 1,8V 16-bit id b1 against device_id 17 failed
DM385 -> name NAND 128MiB 3,3V 16-bit id c1 against device_id 17 failed
DM385 -> name NAND 256MiB 1,8V 8-bit id aa against device_id 17 failed
DM385 -> name NAND 256MiB 3,3V 8-bit id da against device_id 17 failed
DM385 -> name NAND 256MiB 1,8V 16-bit id ba against device_id 17 failed
DM385 -> name NAND 256MiB 3,3V 16-bit id ca against device_id 17 failed
DM385 -> name NAND 512MiB 1,8V 8-bit id ac against device_id 17 failed
DM385 -> name NAND 512MiB 3,3V 8-bit id dc against device_id 17 failed
DM385 -> name NAND 512MiB 1,8V 16-bit id bc against device_id 17 failed
DM385 -> name NAND 512MiB 3,3V 16-bit id cc against device_id 17 failed
DM385 -> name NAND 1GiB 1,8V 8-bit id a3 against device_id 17 failed
DM385 -> name NAND 1GiB 3,3V 8-bit id d3 against device_id 17 failed
DM385 -> name NAND 1GiB 1,8V 16-bit id b3 against device_id 17 failed
DM385 -> name NAND 1GiB 3,3V 16-bit id c3 against device_id 17 failed
DM385 -> name NAND 2GiB 1,8V 8-bit id a5 against device_id 17 failed
DM385 -> name NAND 2GiB 3,3V 8-bit id d5 against device_id 17 failed
DM385 -> name NAND 2GiB 1,8V 16-bit id b5 against device_id 17 failed
DM385 -> name NAND 2GiB 3,3V 16-bit id c5 against device_id 17 failed
DM385 -> name AND 128MiB 3,3V 8-bit id 01 against device_id 17 failed
No NAND device found!!!
DM385 -> nand_select_chip->-1
0 MiB
MMC:   : 0, ON-BOARD SDIO: 1

 

GPMC Register value from uboot command prompt:

GPMC_CONFIG -> 50000050: 00000012
GPMC_STATUS -> 50000054: 00000301

GPMC_CONFIG1_0 -> 50000060: 00000800 - NAND Flash, device size is 8 bit
GPMC_CONFIG2_0 -> 50000064: 00060600
GPMC_CONFIG3_0 -> 50000068: 00060601
GPMC_CONFIG4_0 -> 5000006c: 04010401
GPMC_CONFIG5_0 -> 50000070: 00040506
GPMC_CONFIG6_0 -> 50000074: 04000580
GPMC_CONFIG7_0 -> 50000078: 00000048 - Chip select size is 128MB, A27, CS enabled
GPMC_CONFIG7_1 -> 500000a8: 00000f00 - Chip select size is 16MB, CS Disabled
GPMC_CONFIG7_2 -> 500000d8: 00000f00 - Chip select size is 16MB, CS Disabled
GPMC_CONFIG7_3 -> 50000108: 00000f00 - Chip select size is 16MB, CS Disabled
GPMC_CONFIG7_4 -> 50000138: 00000f00 - Chip select size is 16MB, CS Disabled
GPMC_CONFIG7_5 -> 50000168: 00000f00 - Chip select size is 16MB, CS Disabled

 

regards,

Ganesh

bacd's picture
Cypress Employee
12 posts

Hi Ganesh,

I spent some time to review the registers value you're using.

Please try to relax the timings by increasing the values of OEOFFTIME, WEONTIME. For instance, in your GPMC_CONFIG4_0, I saw that OEONTIME is set to 1 GPMC_FCLK cycle  and OEODDTIME is set to 4 GPMC_FCLK cycle which leaves only 3 clock cycles for the read cycle, which is too low. Same thing for the write cycle, i.e: WEONTIME and WEOFFTIME.

Same thing in register GPMC_CONFIG5_0 where you could increase the values RDCYCLETIME, WRCYCLETIME...

It's to me clear that there is something wrong with the controller settings to operate our flash.

Please continue to play around with the settings by relaxing the timings as much as possible and give it a try.

Could you try reading the ONFI signature and ONFI table?

Is this the unique board you have at hand which you can test with? Can you replace the unit and try with another one?

You might also contact TI as well for their support on this problem, since they have the expertise of the controller.

Best regards,

Bacem

ganesh.b_1823111's picture
User
11 posts

Hi Daassi,

We have multiple boards, we have tested on all of them we are facing the same issue.

As per your suggestion we relaxed maximum time we can do it in GPMC_CONFIG register. but nothing major happen.

50000060: 00000800  
50000064: 00060600  
50000068: 00060f01   
5000006c: 0c071807   
50000070: 00151e1e   
50000074: 04000580   
50000078: 00000048   

regards,

Ganesh

bacd's picture
Cypress Employee
12 posts

Hi Ganesh,

Thanks for your effort!

I think at this stage, it's clear enough that there is something wrong with the controller settings to operate our flash.

What's the name of the TI board driver you're using? I'd like to take a look at this driver as well.

You mentioned you had another working part. From which manufacturer is it and what's its OPN?

Could you try reading the ONFI signature and ONFI table?

You might also contact TI as well for their support on this problem, since they have the expertise of the controller.

Best regards,

Bacem

ganesh.b_1823111's picture
User
11 posts

Hi Daassi,

I'm using TI DM385 IPNC board,

board/ti/dm385_ipnc/evm.c -> board file

arch/arm/cpu/arm_cortexa8/ti81xx/mem.c

arch/arm/cpu/arm_cortexa8/ti81xx/sys_info.c

drivers/mtd/nand/ti81xx_nand.c -> nand driver

drivers/mtd/nand/nand.c

drivers/mtd/nand/nand_base.c

arch/arm/include/asm/arch-ti81xx/mem.h / nand.h -> sets config values

We are using micron x16 bit ONFI 1.0. it is not having any issue. From TI side their is no much support. As uboot and kernel is old they are not providing much support.

 

regards,

Ganesh

Log in to post new comments.