Sorry to abandoned this thread but my wife get pregnant, my son was hospitalized few times and did't have time to this until now, I've been looking for some datasheet and see a problem to continue developing this board.
The booster did't give enough current, we need at last 200mA, using this: http://www.daycounter.com/Calculators/Switching-Converter-Calculator.phtml I have entered a 400mA max to the calculator and need do some code rework.
I tried to understand all the math behind the firmware but I couldn't.
Get This:
Item Value Units
Volts In 5 V
Volts Out 13 V
Load Current 0.4 A
Freq. 90 KHz
Vripple 0.13 V
Duty Cycle 74.358974358974 %
Ipp Inductor 0.02 A
Ipk Inductor 0.41 A (Max USB current is 500mA)
Irms 0.3900427327016 A
L 1239.3162393162 uH
C 25.421871575718 uF
Please help.
Last edit: Vitor_Boss 2015-06-19
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I want information about DCDC routine to change it.
We need at least 200mA for old parallel memories, models like 27C512 use 35mA on vcc and 40mA on vpp, this is very close of max current of actual circuit, this will cause high ripple and instability in writing data. Also I'm building one adapter to support any voltage programming (from 2.7 to 6.25) to fit any parallel memory and expand data bus to 16bits with selected voltage output. I think it might help with uW programming
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The limitation is in the hardware; I think the routine could be the same.
The present circuit can source a couple of mA at most.
Resizing inductor, transistor, and filters should give the result you need.
I think you only need 3.3V and 5V as power supply; that can easily be handled with a switch or jumper; a variable supply likely requires level shifters (bidirectional), a significant complication.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Well, automation means more hardware.
I think you can at least avoid level shifters: 6.5V is compatible with 5V, you just use some series resistors.
Regarding IO expansion I prefer series to parallel shift registers, so you put a number of them in series using just 3 outputs for control; see CD4094.
Perfect for addresses which change slowly.
And for VPP I would go for a fixed boost circuit.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
For a serial shifters the CD4015 is better cause it operates from 2V and capable of higher serial clock comprated to CD4094.
CD4015 is a dual 4bit shifters, it is used on EZoFlash at 3.3v with no problem, I think it is a good start.
5V parallel memories need to be supplied at 6.25V to enable writing on flash.
So far this is a good restart for me, next week I'll post the circuit here
Last edit: Vitor_Boss 2015-06-22
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Alberto Maccioni, this is my prototype:
Address is 24bit long
RB0: Address LSB
RB1: Address second Byte
RB2: Address MSB
Data is 16bit long:
RB3 serial data out
RB4 serial data in
Command:
RC6: clock
RA3: enable address change
RA4: read data from memory in to serial registers
RA5+RC7+RBx data: Select device and bus voltage
low RC7+RBx data: enable device command like OE, WE and chip select
How do you write data to the target memory?
Is it really necessary to have 16 bit data? All memories support an 8 bit mode.
If this is possible I would directly connect RB7:RB0 to data.
(also, please use .png images)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Almost memories support 8bit programming but 16bit is faster on supported devices, also I'm thinking in future memories.
I told you to use 74LS652 to use parallel (RB0-RB7) data in and out and 74F574 to store addresses, my first version is based on those but use more components.
Sorry by the pictures in bmp, take a look on parallel set
I think this is much more complicated than it could be.
First, data width: you don't need 16 bits; the transfer rate is limited by USB speed.
So I would dedicate the entire port B to data, saving all those bus latches.
Then I would use shift registers in series for address and other outputs; the 4094 has the advantage of a strobe signal, so that all outputs change at the same time.
The remaining critical signals can be driven directly by an IO line.
Another possibility is to switch to a larger chip, like a 18F4550, which has more IO lines (although some output expansion is still needed).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I told you on 2015-06-19 to move to 18F4550, it have more IO to work on it.
I know it is more complicated than use shift registers, but it is faster to change anything, USB speed is fast enough to program a 4Mbit memory in less than a minute.
16bit data is used to flash memories like 28F800, this board is a middle interface to each kind of memory adapter.
I have build a new Schematic based on your feedback with only 8 bits data and 24bits address, also I used A3 as clock, A4 for serial data and RC6 to data direction keeping the device voltage selector and control bits as it is ok?
You wrote about 18F4550 but I don't see any additional ports, this works with the standard programmer.
Anyways, here my considerations:
now that there are only 8 bits U4 is useless.
OE of the shift register can be fixed to VDD.
Same for the latches which, by the way, should not be 74F but CMOS to work at different voltage.
I would not multiplex the shift register clock (RA3) but data (RA4) instead.
I'm a bit skeptical about the power concept: I don't see the need to open the ground path, and I think that changing the voltage by bus can be dangerous; what is the problem with using jumpers?
Who is providing VPP?
What is the target power supply and high voltage supply?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Without jumpers the programmer can set the supply to Read or Write by just changing the voltage, with jumpers the programmer will work at on mode at time but after flashing we need to read the device to check data.
The VPPU is the high voltage supply, the target supply is delivered by VPP1.
With PIC18F4550 we can ignore all that and use the SPP to control data and control bits using the PORTD and PORTE. This is the best way to do that because the code needed will not change actual one, only will add more funcion.
So far I'm trying to show you my ideas, please show me yours to finish it, I really need this working
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Sorry, I don't have time to draw schematics right now; I can just comment yours.
Anyways, why do you need to change voltage between read and write?
Also, the current DCDC converter cannot provide more than a couple of mA, so you have to put another converter on board, supplied by VDD.
If this has to be an universal interface it needs to provide also a VPP voltage to the target memory (different from what is now VPP1).
And if you provide a variable VPP1 to supply the target what is the need for VP2?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
In my design I have put the VP1 to power up different devices, it can be selected by jumpers too, VP2 is the BUS voltage 5V or 3.3V, because of the BUS voltage the U4 in needed. The high voltage will use the original VPP provided by the programmer.
Old parallel memories need 12.5V on VPP pin and 6.25V(provided by VP1) on VCC pin to enable writing, this mode can Read the device too, but is not needed to Read, with only 5V works to Read. 3.3V memories enables writing just changing the supply to 3.6V but the BUS need to be in 3.3V to don't damage the device.
Now the variable source will use jumpers.
I don't have an oscilloscope here, could you confirm the DCDC supply as last 100mA at 12.5V without ripple?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I can confirm that the current DCDC can NOT supply 100mA; you can draw a couple of mA at most.
You should have one voltage for target and interface chips and one for VPP; I don't see the need for more.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Again, the BUS voltage and Supply voltage can't be the same, VPP is provided by the programmer DCDC booter. And to this expansion board work a boost rework is needed.
Look this table taken from the MN27C256 chip and try to understand why VP1
I don't see a reason for having different bus and supply voltage.
You should change your naming convention to reflect what is used in target memories: VPP for programming and VCC for supply.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Sorry for changing names, now this is the version with jumpers and on my board I will put a separated voltage control for BUS and VPP, I like because it seems more secure for me, to don't use it is just don't put it on the board and wire it to the VPP pin if you want.
VBUS has to be VCC: you cannot mix 3.3V outputs with 6.25V devices (that's the extreme case); also there's no reason to have them separate.
Anyways, using a 470ohm series resistor will cause an unacceptable drop depending on the (variable) load current; a regulator is always needed to derive a supply.
Why 3 CS outputs?
I see a problem when you need to program memories that require 5V on both VCC and VPP: you fix VPP at 5V so U13 will not be able to supply 5V but less, probably 4V depending on the load current.
And regarding the generation of VPP I would place an on-board boost circuit, supplied by VDDU.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
There is something you are not seeing, the 6.25V is used to enable programming on 5V devices but the data and addresses lines must be 5V, on the MN27C256 datasheet the wave forms is 2V at high state. And 3.3V devices enable writing with 3.6V or 5V depending of device, but data and addresses must be 3.3V.
The others things I will rework on them.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
You are not interpreting the datasheet in the correct way; the device has a single supply for core and IO, so you should use the same voltage for both.
Its output lines will be driven at VCC, and its inputs can be driven at anything above the input threshold.
The fact that the threshold is 2V doesn't mean that you should use that value: on the contrary, values near the threshold will give higher power consumption and higher delay.
To my knowledge there are no memories that have a separate core and VIO domains.
You are complicating the circuit without reason.
By the way, trying to support old 27C memories and mewer flash memories at the same time requires a more complicated circuit; you may want to split the two cases using different boards.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thank a lot I opened with WinPic800 and I made a JDM PGM and eveything is OK now.
MY Open Programmer WORKS. Thanks a lot for your Help.
Stefan
Sorry to abandoned this thread but my wife get pregnant, my son was hospitalized few times and did't have time to this until now, I've been looking for some datasheet and see a problem to continue developing this board.
The booster did't give enough current, we need at last 200mA, using this: http://www.daycounter.com/Calculators/Switching-Converter-Calculator.phtml I have entered a 400mA max to the calculator and need do some code rework.
I tried to understand all the math behind the firmware but I couldn't.
Get This:
Item Value Units
Volts In 5 V
Volts Out 13 V
Load Current 0.4 A
Freq. 90 KHz
Vripple 0.13 V
Duty Cycle 74.358974358974 %
Ipp Inductor 0.02 A
Ipk Inductor 0.41 A (Max USB current is 500mA)
Irms 0.3900427327016 A
L 1239.3162393162 uH
C 25.421871575718 uF
Please help.
Last edit: Vitor_Boss 2015-06-19
I'm not sure of what you're trying to do; do you want to substiture the DCDC converter?
Why do you need 200mA at high voltage?
I want information about DCDC routine to change it.
We need at least 200mA for old parallel memories, models like 27C512 use 35mA on vcc and 40mA on vpp, this is very close of max current of actual circuit, this will cause high ripple and instability in writing data. Also I'm building one adapter to support any voltage programming (from 2.7 to 6.25) to fit any parallel memory and expand data bus to 16bits with selected voltage output. I think it might help with uW programming
The limitation is in the hardware; I think the routine could be the same.
The present circuit can source a couple of mA at most.
Resizing inductor, transistor, and filters should give the result you need.
I think you only need 3.3V and 5V as power supply; that can easily be handled with a switch or jumper; a variable supply likely requires level shifters (bidirectional), a significant complication.
27Cxxx Requires 12.7 on VPP and 6.25 on VCC to enable the programming mode, also I have found this: http://www.komponenten.es.aau.dk/fileadmin/komponenten/Data_Sheet/MOS-TTL/ls/74LS652.pdf.pdf and it almost fit only on a 18F4550 version board because it need 4 more controls to operate, it is bidirectional and have real time output, needed in SPI and I2C operations.
Variable power supply is easy with a LM317, 1N4148, couple capacitors and resistors. Look the attachment
I don't like jumpers, if you forgot to change one you can damage the device, I love automate everything.
Look this parallel programmer: http://www.ezoflash.com , it use a LOT of expansions boards and jumpers.
Last edit: Vitor_Boss 2015-06-19
Well, automation means more hardware.
I think you can at least avoid level shifters: 6.5V is compatible with 5V, you just use some series resistors.
Regarding IO expansion I prefer series to parallel shift registers, so you put a number of them in series using just 3 outputs for control; see CD4094.
Perfect for addresses which change slowly.
And for VPP I would go for a fixed boost circuit.
View and moderate all "Open Discussion" comments posted by this user
Mark all as spam, and block user from posting to "Discussion"
For a serial shifters the CD4015 is better cause it operates from 2V and capable of higher serial clock comprated to CD4094.
CD4015 is a dual 4bit shifters, it is used on EZoFlash at 3.3v with no problem, I think it is a good start.
5V parallel memories need to be supplied at 6.25V to enable writing on flash.
So far this is a good restart for me, next week I'll post the circuit here
Last edit: Vitor_Boss 2015-06-22
Alberto Maccioni, this is my prototype:
Address is 24bit long
RB0: Address LSB
RB1: Address second Byte
RB2: Address MSB
Data is 16bit long:
RB3 serial data out
RB4 serial data in
Command:
RC6: clock
RA3: enable address change
RA4: read data from memory in to serial registers
RA5+RC7+RBx data: Select device and bus voltage
low RC7+RBx data: enable device command like OE, WE and chip select
How do you write data to the target memory?
Is it really necessary to have 16 bit data? All memories support an 8 bit mode.
If this is possible I would directly connect RB7:RB0 to data.
(also, please use .png images)
Almost memories support 8bit programming but 16bit is faster on supported devices, also I'm thinking in future memories.
I told you to use 74LS652 to use parallel (RB0-RB7) data in and out and 74F574 to store addresses, my first version is based on those but use more components.
Sorry by the pictures in bmp, take a look on parallel set
Last edit: Vitor_Boss 2015-06-26
Here is the wave forms of proposed circuit is previous post.
What you think? To complicated or to easy to implement in firmware?
Last edit: Vitor_Boss 2015-06-26
I think this is much more complicated than it could be.
First, data width: you don't need 16 bits; the transfer rate is limited by USB speed.
So I would dedicate the entire port B to data, saving all those bus latches.
Then I would use shift registers in series for address and other outputs; the 4094 has the advantage of a strobe signal, so that all outputs change at the same time.
The remaining critical signals can be driven directly by an IO line.
Another possibility is to switch to a larger chip, like a 18F4550, which has more IO lines (although some output expansion is still needed).
I told you on 2015-06-19 to move to 18F4550, it have more IO to work on it.
I know it is more complicated than use shift registers, but it is faster to change anything, USB speed is fast enough to program a 4Mbit memory in less than a minute.
16bit data is used to flash memories like 28F800, this board is a middle interface to each kind of memory adapter.
I have build a new Schematic based on your feedback with only 8 bits data and 24bits address, also I used A3 as clock, A4 for serial data and RC6 to data direction keeping the device voltage selector and control bits as it is ok?
Last edit: Vitor_Boss 2015-06-29
You wrote about 18F4550 but I don't see any additional ports, this works with the standard programmer.
Anyways, here my considerations:
now that there are only 8 bits U4 is useless.
OE of the shift register can be fixed to VDD.
Same for the latches which, by the way, should not be 74F but CMOS to work at different voltage.
I would not multiplex the shift register clock (RA3) but data (RA4) instead.
I'm a bit skeptical about the power concept: I don't see the need to open the ground path, and I think that changing the voltage by bus can be dangerous; what is the problem with using jumpers?
Who is providing VPP?
What is the target power supply and high voltage supply?
Without jumpers the programmer can set the supply to Read or Write by just changing the voltage, with jumpers the programmer will work at on mode at time but after flashing we need to read the device to check data.
The VPPU is the high voltage supply, the target supply is delivered by VPP1.
With PIC18F4550 we can ignore all that and use the SPP to control data and control bits using the PORTD and PORTE. This is the best way to do that because the code needed will not change actual one, only will add more funcion.
So far I'm trying to show you my ideas, please show me yours to finish it, I really need this working
Sorry, I don't have time to draw schematics right now; I can just comment yours.
Anyways, why do you need to change voltage between read and write?
Also, the current DCDC converter cannot provide more than a couple of mA, so you have to put another converter on board, supplied by VDD.
If this has to be an universal interface it needs to provide also a VPP voltage to the target memory (different from what is now VPP1).
And if you provide a variable VPP1 to supply the target what is the need for VP2?
In my design I have put the VP1 to power up different devices, it can be selected by jumpers too, VP2 is the BUS voltage 5V or 3.3V, because of the BUS voltage the U4 in needed. The high voltage will use the original VPP provided by the programmer.
Old parallel memories need 12.5V on VPP pin and 6.25V(provided by VP1) on VCC pin to enable writing, this mode can Read the device too, but is not needed to Read, with only 5V works to Read. 3.3V memories enables writing just changing the supply to 3.6V but the BUS need to be in 3.3V to don't damage the device.
Now the variable source will use jumpers.
I don't have an oscilloscope here, could you confirm the DCDC supply as last 100mA at 12.5V without ripple?
I can confirm that the current DCDC can NOT supply 100mA; you can draw a couple of mA at most.
You should have one voltage for target and interface chips and one for VPP; I don't see the need for more.
Again, the BUS voltage and Supply voltage can't be the same, VPP is provided by the programmer DCDC booter. And to this expansion board work a boost rework is needed.
Look this table taken from the MN27C256 chip and try to understand why VP1
Edit: You can read 4005 parallel memory datasheets from here: http://www.ezoflash.com/chip_database.php
Last edit: Vitor_Boss 2015-07-07
I don't see a reason for having different bus and supply voltage.
You should change your naming convention to reflect what is used in target memories: VPP for programming and VCC for supply.
Sorry for changing names, now this is the version with jumpers and on my board I will put a separated voltage control for BUS and VPP, I like because it seems more secure for me, to don't use it is just don't put it on the board and wire it to the VPP pin if you want.
Check this.
VBUS has to be VCC: you cannot mix 3.3V outputs with 6.25V devices (that's the extreme case); also there's no reason to have them separate.
Anyways, using a 470ohm series resistor will cause an unacceptable drop depending on the (variable) load current; a regulator is always needed to derive a supply.
Why 3 CS outputs?
I see a problem when you need to program memories that require 5V on both VCC and VPP: you fix VPP at 5V so U13 will not be able to supply 5V but less, probably 4V depending on the load current.
And regarding the generation of VPP I would place an on-board boost circuit, supplied by VDDU.
Tne VDDU circuit can provide a 100mA maximum according to http://www.nxp.com/documents/data_sheet/BC556_557.pdf
There is something you are not seeing, the 6.25V is used to enable programming on 5V devices but the data and addresses lines must be 5V, on the MN27C256 datasheet the wave forms is 2V at high state. And 3.3V devices enable writing with 3.6V or 5V depending of device, but data and addresses must be 3.3V.
The others things I will rework on them.
You are not interpreting the datasheet in the correct way; the device has a single supply for core and IO, so you should use the same voltage for both.
Its output lines will be driven at VCC, and its inputs can be driven at anything above the input threshold.
The fact that the threshold is 2V doesn't mean that you should use that value: on the contrary, values near the threshold will give higher power consumption and higher delay.
To my knowledge there are no memories that have a separate core and VIO domains.
You are complicating the circuit without reason.
By the way, trying to support old 27C memories and mewer flash memories at the same time requires a more complicated circuit; you may want to split the two cases using different boards.